niedziela, 28 grudnia 2014

Przenoszenie systemu na inną partycję (inny system plików)

Jakiś czas temu na phoronix.com pojawiło się porównanie wydajności systemów plików na dyskach SSD. Samsung utworzył system przeznaczony właśnie na dyski flash (pendrive, karty SD, dyski SSD). Zachęcony tym, postanowiłem przenieść system plików na partycję F2FS (flash friendly file system). [phoronix.com]

Aby to zrobić, trzeba zrobić odpowiednio dużo miejsca na dysku, by móc skopiować dane z jednej partycji, na drugą, by móc sformatować 'pierwotną' jako f2fs i przenieść tam dane z powrotem.

Po każdym przeniesieniu konieczne jest zaktualizowanie grub'a, by móc uruchomić stary system.
Dodatkowo, grub nie obsługuje f2fs, więc koniecznym jest posiadanie partycji boot w 'starym' systemie plików (ext2, 3 lub 4).kocham godzie.

Aby to zrobić warto skorzystać z przewodnika Ubuntu:

  1. Tworzymy partycję boot (200 mb powinno wystarczyć, 500 jest dużo ponad rzeczywiste zapotrzebowanie). Wygodnym narzędziem będzie gparted (dostępny w centrum oprogramowania). Partycja najlepiej by była ext4 lub coś podobnego.
  2. Montujemy tak przygotowaną partycję o odpowiednim numerze zamiast X (X to numer utworzonej partycji pod boot) i kopiujemy na nią dotychczasową zawartość katalogu boot:

    sudo mkdir /mnt/boot
    sudo mount /dev/sdaX /mnt/boot
    sudo cp -a /mnt/main/boot/* /mnt/boot/
    sudo umount /mnt/boot
  3. Aktualizujemy grub:

    sudo mount /dev/sdaX /boot
    grub-install --root-directory=/ /dev/sda
  4. Aktualizujemy fstab:
    W tym celu należy sprawdzić jaki ID posiada nasza nowa partycja poleceniami mountsudo blkid. Przykładowe wyjście:

    mount:
    (...)
    /dev/sda8 on /boot type ext4 (rw)
    (...)


    blkid:
    (...)
    /dev/sda8: LABEL="boot" UUID="3429a664-5f36-4878-baa6-35e8f63c63cc" TYPE="ext4" PARTUUID="000186d0-08"


    Jak widać nasza partycja (tutaj ósma) posiada UUID 3429a664-5f36-4878-baa6-35e8f63c63cc.
    Kopiujemy tę wartość i umieszczamy na końcu pliku /etc/fstab w takiej postaci:

    UUID=3429a664-5f36-4878-baa6-35e8f63c63cc     /boot     ext4        defaults    0       0

    Zapisujemy i wychodzimy.
  5. Restartujemy komputer mając nadzieję, że wszystko poszło jak należy i ew. czyścimy stary katalog boot:

    sudo umount /boot
    sudo rm -r /boot
Pierwszy etap już za nami (etap wstępny, choć długi), teraz faktyczna praca nad zmianą systemu plików. [źródło]

By przenieść się na nowy system plików (f2fs) potrzebny nam blkid go obsługujący. Będzie nim wersja od 2.25 (blkid -v). Jeśli takiej nie mamy:
sudo add-apt-repository ppa:xeron-oskom/util-linux
sudo apt-get update
sudo apt-get install util-linux --reinstall
Instalujemy co potrzebne:
sudo apt-get install f2fs-tools gparted
Dodajemy moduł f2fs do initramfs (niezbędne, by system był w stanie odczytać nową partycję!). W tym celu edytujemy /etc/initramfs-tools/modules i dodajemy na końcu linijkę f2fs, oraz uruchamiamy komendę sudo update-initramfs -u. Mamy już system, który jest w stanie zbootować się z partycji f2fs, teraz trzeba go na nią przenieść. Tworzymy zatem nową partycję o formacie f2fs (za pomocą gparted), montujemy ją* i kopijemy zawartość / (generalnie niepolecane jest kopiowanie plików z działającego systemu, ale raczej nie powinno być z tym problemów):
sudo mkdir /media/f2fs
sudo mount /dev/sdx /media/f2fs
sudo cp -ax /* /media/f2fs
 Ponownie edytujemy fstab (tym razem na nowej partycji), tj. plik /media/f2fs/etc/fstab, usuwając starą linijkę / nową, np taką:
UUID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxxx / f2fs rw,relatime,background_gc=on,user_xattr,acl,active_logs=6 0 0
zastępując x'y UUID nowej partycji (podobnie jak w przypadku /boot).

Na koniec (ponowna) aktualizacja grub'a:
sudo mount /dev/sdx /media/f2fs/boot
sudo mount --bind /dev /media/f2fs/dev
sudo mount --bind /proc /media/f2fs/proc
sudo mount --bind /sys /media/f2fs/sys
sudo chroot /media/f2fs
Wykonujemy (w chrootowanym systemie) komendę sudo update-grub.

Po restarcie powinniśmy się już cieszyć linuksem chodzącym z nowej partycji.

Zapraszam, do dopisania się do życzenia o dodanie opcji instalacji ubuntu na systemie F2FS: link.

Gdyby gparted niepoprawnie utworzył system plików, wystarczy uruchomić komendę mkfs.f2fs -t f2fs na odpowiedniej partycji.

Inne źródła: 1 2

poniedziałek, 3 listopada 2014

Czarny ekran po uśpieniu na AMD A4

Posiadam laptopa Samsung NP535U3C z APU AMD na pokładzie (nie polecam):

lspci
(...)
00:01.0 VGA compatible controller: Advanced Micro Devices, Inc. [AMD/ATI] Trinity [Radeon HD 7400G]
(...)
 Na otwartych sterownikach (o czym już pisałem) układ ten działa albo lepiej, albo równie dobrze, więc wolałbym uniknąć używania sterowników 'producenta'. Niestety, otwarte sterowniki mają jedną poważną wadę: po uśpieniu komputera i jego obudzeniu ekran laptopa pozostaje wyłączony (czasem laptop w ogóle się nie budzi poprawnie, ale to zdarza się również na sterownikach zamkniętych). Szczęśliwie, i na ten problem znalazło się rozwiązanie.

Na różnych stronach można znaleźć różne rozwiązania, ale we wszystkich pojawia się hasło s3_bios. Problem spotykany jest również na sprzęcie Intela.


Aby rozwiązać problem należy do parametrów jądra dodać acpi_sleep=s3_bios lub acpi_sleep=s3_bios,s3_mode.

Aby to zrobić, wystarczy do parametrów jądra w /etc/default/grub, w linii GRUB_CMDLINE_LINUX_DEFAULT dodać wcześniej wspomnianą opcję, by wyglądało to np. tak:
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash nmi_watchdog=0 acpi_sleep=s3_bios,s3_mode"

Gdzie indziej spotkałem się z informacją, że to nie zadziała póki do pm-suspend nie doda się (też!) tej opcji. Aby to zrobić: sudo nano /etc/pm/config.d/radeon:
ADD_PARAMETERS="--quirk-s3-bios --quirk-s3-mode"
QUIRK_S3_BIOS="true"
QUIRK_S3_MODE="true"
I to wystarczy.

piątek, 17 października 2014

Nieoficjalny ROM na Xperia U

Przyzwyczajony jestem, że aby zainstalować nieoficjalny ROM na telefonie z Androidem (doświadczenia z X10 i HTC jakiśtam) muszę przesiadać się na Windowsa. Z Windowsem bywa różnie - zabawa ze sterownikami, antywirusami, firewallami, komunikatorami i jasnością ekranu - bezsensowna robota.

Jak się jednak okazuje sytuacja się od ostatniego czasu zmieniła, a aktualizacja sprowadza się do kilku banalnych kroków.

Na początek wybieramy ROM i kernel, np. te:
ROM: http://forum.xda-developers.com/xperia-u/u-development/rom-stock-jellybean-4-1-2-v6-t2284394
Kernel: http://forum.xda-developers.com/xperia-u/u-development/kernel-experimental-v12-t2326515 (wspomniany w poprzednim linku)

Rozpakowujemy paczkę kernel, aby wydostać z niego boot.img.

Odblokowujemy bootloader na stronie (wg. instrukcji): http://unlockbootloader.sonymobile.com/instructions

I już jesteśmy gotowi do wgrywania (zrzekam się odpowiedzialności za ew. szkody/utratę gwarancji).

Na początek wrzucamy paczkę z ROM'em (spakowaną tak jak została ściągnięta) na pamięć wewnętrzną telefonu. Skuteczny jest w tym przypadku program gmtp.

Następnie, udajemy się do katalogu z obrazem boot, wyłączamy telefon i podłączamy go trzymając przycisk zwiększania głośności.

Telefon powinien świecić na niebiesko (dioda pod przyciskami).

Teraz:
sudo fastboot flash boot boot.img
[sudo] password for quiteinsaneblablador:
sending 'boot' (7732 KB)...
(bootloader) USB download speed was 19407kB/s
OKAY [  0.423s]
writing 'boot'...
(bootloader) Flash of partition 'boot' requested
(bootloader) S1 partID 0x00000003, block 0x0000d000-0x00014fff
(bootloader) Erase operation complete, 0 bad blocks encountered
(bootloader) Flashing...
(bootloader) Flash operation complete
OKAY [  0.678s]
finished. total time: 1.101s

Jeśli wszystko poszło jak należy, odłączamy telefon od komputera i włączamy go trzymając przycisk Volume Up. Po chwili powinien pojawić się panel CWM, a w nim wybieramy po kolei wipe: cache, data, dalvik-cache. Następnie install zip i wybieramy odpowiedni ROM do instalacji. Gdy program zakończy wgrywanie ROMu wyłączamy i włączamy telefon.

That's all folks!

pozostałe źródła:
http://forum.android.com.pl/f670/instalacja-kerneli-przez-flashtool-fastboot-236690/
http://forum.xda-developers.com/showthread.php?t=1752270
http://forum.android.com.pl/f669/cwm-co-to-na-co-jak-zainstalowaae-229632/
http://www.androidlegend.com/ported-official-android-4-1-2-jelly-bean-firmware-for-xperia-u-st25i-6-2-a-1-100/#kernel

poniedziałek, 18 sierpnia 2014

HTML Validator w Firefoxie

Jakiś czas temu przez chwilę pracowałem na Windowsie. Wpadłem wtedy na pomysł, by przy pisaniu strony kontrolować 'poprawność' html'a i css'a. Szybki ogląd na sprawę sprowadził mnie do wtyczki HTML Validator. Niestety, po powrocie na Linuksa okazało się, że wersja w 'sklepie' FF jest niekompatybilna z moim systemem. Na szczęście starsze wersje, dostępne TU, są kompatybilne.

sobota, 16 sierpnia 2014

wicd + wvdial, czyli alternatywa dla NetworkManager

NetworkManager mnie po prostu drażni... Ostatnio wpisałem nawet w google "NetworkMenager sucks" i znalazłem dużo wyników.

Jak go zastąpić? Otóż bardzo wdzięczną i użyteczną alternatywą jest wicd. Jest to menadżer sieci WIFI oraz LAN. Niestety nie wspomniałem i nie mogę tutaj wspomnieć o sieciach GSM, gdyż ich obsługę przewidziano na daleką przyszłość (wicd 2.0).

Używam modemu Nokia CS-11, który nie jest specjalnie udanym modelem, ale działa. Korzystam również z sieci Play, bo tak.

Aby skonfigurować połączenie bez NM, można skorzystać z aplikacji gnome-ppp, która mi nie przyniosła wiele szczęścia. gnome-ppp jest niczym innym jak interfejsem dla wvdial, aplikacji służącej niczemu innemu jak właśnie wdzwanianiu się. Aby go używać, należy go skonfigurować:

sudo nano /etc/wvdial.conf:
[Dialer P4]
Modem = /dev/ttyACM0
;Baud = 921600
Baud = 460800
Init1 = ATH
Init2 = ATE1
Init3 = AT+CGDCONT=1,"IP","internet"
Dial Command = ATD
Phone = *99#
Stupid mode = yes
Username =;
Password =;
Auto DNS = yes
Gdzie:
internet - nazwa APN,
username i password - w ten sposób zostają zachowane jako puste,
Baud - prędkość komunikacji z modemem. Gdzieś kiedyś wyczytałem, że ustawienie zbyt wysokiej częstotliwości przepływu danych, przy współczesnych urządzeniach niczemu nie zaszkodzi, gdyż urządzenia się skomunikują.
Modem - pseudoplik przedstawiający nasze urządzenie. Częściej jest to /dev/ttyUSBx (x - 0 do 2), ale w moim przypadku wyszło tak.

Początkowo miałem problem polegający na tym, że modem się łączył wvdial nie miał o nic pretensji a ping nie szedł. Okazało się, że należy dopisać drogę, gdyż wvdial sam tego nie robi [źródło]:
sudo route add default gw 10.0.0.1
Gdzie 10.0.0.1 to IP jakie zwraca wvdial pod nazwą remote IP address (które wydaje się być stałe dla danego operatora).

czwartek, 24 lipca 2014

Zarządca procesora: conservative

Uwaga! Informacje w poniższym poście mogą być przydatne (w szczególności kwestia podrasowywania zarządcy, ale narzędziem do sterowania zarządcami/prędkościami lepszym jest cpufreqd.

Sugeruję conservative governor [źródło]. W skrócie, jest to tryb podobny do ondemand, z tym, że, gdy ondemand wykryje przekroczenie obciążenia procesora (o tym później), ustawia go na maksymalną częstotliwość. Conservative robi to spokojniej. Po przekroczeniu ustawia procesor na częstotliwość 'o krok wyżej'. Aby ustanowić conservative jako domyślne ustawienie trzeba zainteresować się plikiem /etc/init.d/ondemand. Skrypt ten po około minucie od uruchomienia systemu zmienia zarządcę na ondemand [źródło]. Aby go całkowicie wyłączyć wystarczy:
sudo update-rc.d -f ondemand remove
Przyda nam się on jeszcze do jednej rzeczy - aby utworzyć skrypt conservative. Ja sam skopiowałem skrypt ondemand do conservative:
sudo cp /etc/init.d/ondemand /etc/init.d/conservative
Oraz zamieniłem odpowiednie wpisy ondemand na conservative, w wyniku czego otrzymałem taki skrypt:

#! /bin/sh
### BEGIN INIT INFO
# Provides:          ondemand
# Required-Start:    $remote_fs $all
# Required-Stop:
# Default-Start:     2 3 4 5
# Default-Stop:
# Short-Description: Set the CPU Frequency Scaling governor to "conservative"
### END INIT INFO

# Don't run if we're going to start an Android LXC container:
[ ! -f /etc/init/lxc-android-config.conf ] || exit 0

PATH=/sbin:/usr/sbin:/bin:/usr/bin

. /lib/init/vars.sh
. /lib/lsb/init-functions

AVAILABLE="/sys/devices/system/cpu/cpu0/cpufreq/scaling_available_governors"

case "$1" in
    start)
        start-stop-daemon --start --background --exec /etc/init.d/conservative -- background
        ;;
    background)
        sleep 60 # probably enough time for desktop login

        [ -f $AVAILABLE ] || exit 0
        read governors < $AVAILABLE
        case $governors in
                *interactive*)
                        GOVERNOR="interactive"
                        break
                        ;;
                *conservative*)
                        GOVERNOR="conservative"
                        break
                        ;;
                *)
                        exit 0
                        ;;
        esac

        for CPUFREQ in /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor
        do
                [ -f $CPUFREQ ] || continue
                echo -n $GOVERNOR > $CPUFREQ
        done
        ;;
    restart|reload|force-reload)
        echo "Error: argument '$1' not supported" >&2
        exit 3
        ;;
    stop)
        ;;
    *)
        echo "Usage: $0 start|stop" >&2
        exit 3
        ;;
esac
Aby zmusić skrypt do działania zamiast ondemand, należy jeszcze wykonać poniższe komendy [źródło]:
sudo chmod +x /etc/init.d/conservative
sudo update-rc.d conservative start 99 2 3 4 5 .
Idąc dalej, można 'dopieścić' skrypt aby ustawiał wymarzone przez nas progi i parametry trybu conservative. W tym celu warto przyjrzeć się plikom znajdującym się w /sys/devices/system/cpu/cpufreq/conservative/ [źródło]:

down_threshold - obciążenie procesora poniżej którego zmniejszana jest częstotliwość (domyślnie: 20%)
freq_step - krok zwiększania/zmniejszania częstotliwości (domyślnie: 5%)
ignore_nice_load - wliczanie lub niewliczanie procesów 'nice', tj. "nie ważne jak długo robisz" do udziału w obciążeniu (domyślnie: 0)
sampling_down_factor - wpływa na wydajność podczas pełnego obciążenia. Zapobiega zmianom częstotliwości (góra/dół) przy pełnym obciążeniu (domyślnie: 1)
sampling_rate - co jaki czas system ma sprawdzać obciążenie procesora

W pliku przytoczonym jako źródło zaleca się:
echo $(($(cat /sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_transition_latency)*750/1000))
W moim wypadku komenda zwraca 3000 co jest mniej niż minimum (domyślnie: 80000).

sampling_rate_min:
echo $(($(cat /sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_transition_latency)*100))
Tutaj 400000 (domyślnie: 8000).

up_threshold - obciążenie po przekroczeniu którego częstotliwość jest zwiększana (domyślnie: 80%)

aby trochę podrasować powyższe parametry wystarczy zapisać do danych plików konkretne parametry (jako root):
        echo -n 30 > /sys/devices/system/cpu/cpufreq/conservative/down_threshold
        echo -n 1 > /sys/devices/system/cpu/cpufreq/conservative/ignore_nice_load
        echo -n 70 > /sys/devices/system/cpu/cpufreq/conservative/up_threshold
A to można wrzucić do pliku /etc/init.d/conservative, za pętlą CPUFREQ.