persistent impossible

przygotowując wpis nt. instalacji Ubuntu 9.04 na pendrajwie ze zdziwieniem stwierdziłem że trybu presistent – czyli takiego który zachowuje dane na piórku, w żaden sposób nie mogę osiągnąć. Jako że skrypt przygotowujący tą instalację jest w pythonie, odpuściłem sobie grzebanie po nim stwierdzając, że widocznie gdzieś jest spaprany.

Na następny dzień, przestrzeń do zapisu danych z poprzednio ustawianych 3GB zmieniłem na minimalną, czyli 128MB. O dziwo w takiej konfiguracji „trzymanie ustawień” czyli persistent DZIAŁA!

Zasada działania

persistent mode powstał by wersja liveCD, która to instaluje się na pendrajwie, nie była tylko do odczytu, ale by wszystkie zmiany zachowały się wraz z zamknięciem systemu.

Wszystkie zmienone / dodane pliki trzymane są w pliku casper-rw w głównym katalogu piórka (w starszych wersjach ubuntu zamiast pliku była osobna partycja). Plik sformatowany jest w systemie ext3 i podmontowany przez pętle lokalną, czyli z parametrem -o loop.

Problem

Jak zwykle identyfikację i rozwiązanie problemu przyniosło zerknięcie w logi instalatora. Konkretnie w .usb-creator.log stoi:

['dd', 'if=/dev/zero', 'bs=3251162685', 'of=/media/disk/casper-rw', 'count=1']
dd: invalid number `3251162685'
['mkfs.ext3', '-F', '/media/disk/casper-rw']
mke2fs 1.41.4 (27-Jan-2009)
mkfs.ext3: No such file or directory podczas próby określenia rozmiaru systemu plików
['sync']
[18:32:21] Install command exited with code: 0

Jak dla mnie, nie za dobrze świadczy to o osobie piszącej skryp. Ustawienie parametru BS na 3GB ma prawo nie zadziałać i w moim przypadku nie zadziałało.
Wygląda na to, że poniżej 1GB działa, ale i tak jest bez sensu.

Rozwiązanie

Jeśli chcemy by rozmiar przestrzeni do zapisu był większy od ok. 1GB to przy instalacji proponuję ustawić DOWOLNĄ wielkość np. 3GB, i tak wygeneruje to błąd (w logach) bo skrypt poinformuje o sukcesie… ;)
Następnie w terminalu stać się rootem i plik casper-rw stworzyć ręcznie:

dd bs=1M count=3072 if=/dev/zero of=/tam_gdzie_mamy_podmontowane_piórko/casper-rw

root@ubuntu:/home/ubuntu# dd bs=1M count=3072 if=/dev/zero of=/media/disk/casper-rw
3072+0 records in
3072+0 records out
3221225472 bytes (3,2 GB) copied, 230,244 s, 14,0 MB/s

czyli rozmiar bloku ustawiamy na 1MB, a plik casper-rw poskładany będzie z 3072 bloków, czyli będzie miał rozmiar ok. 3GB. Kolej na system plików (tu zastosuję ext3, ale bez księgowania – mniej operacji I/O na pamięci):

root@ubuntu:/home/ubuntu# mke2fs -F -t ext3 -O ^has_journal /media/disk/casper-rw
mke2fs 1.41.4 (27-Jan-2009)
Etykieta systemu plików=
Typ OS: Linux
Rozmiar bloku=4096 (log=2)
Rozmiar fragmentu=4096 (log=2)
196608 i-węzłów, 786432 bloków
39321 bloków (5.00%) zarezerwowanych dla superużytkownika
Pierwszy blok danych=0
Maksymalna liczba bloków systemu plików=805306368
24 grup bloków
32768 bloków w grupie, 32768 fragmentów w grupie
8192 i-węzłów w grupie
Kopie zapasowe superbloku zapisane w blokach: 
	32768, 98304, 163840, 229376, 294912

Zapis tablicy i-węzłów: zakończono                      
Zapis superbloków i podsumowania systemu plików: wykonano

Ten system plików będzie automatycznie sprawdzany co każde 29 montowań
lub co 180 dni, zależnie co nastąpi pierwsze. Można to zmienić poprzez
tune2fs -c lub -i.

Gotowe!

Tagged with →  
Share →