Montowanie systemu plików squashfs w trybie odczytu-zapisu

45

Mam instalację Clonezilla na pamięci USB i chciałbym wprowadzić pewne zmiany w systemie operacyjnym. W szczególności chciałbym wstawić uruchamialny skrypt, /usr/sbinaby ułatwić uruchamianie własnego polecenia tworzenia kopii zapasowych, aby kopie zapasowe były mniej bolesne.

Główny system plików znajduje /live/filesystem.squashfssię na partycji FAT-32 USB.

Jak mogę zamontować ten odczyt / zapis na moim komputerze z systemem Linux, aby móc dodawać / usuwać / zmieniać pliki? Używam pochodnej Ubuntu 12.04.

Naftuli Kay
źródło

Odpowiedzi:

38

Jako root skopiuj filesystem.squashfsdo pustego katalogu , np .:

cp /mnt/clonezilla/live/filesystem.squashfs /path/to/workdir
cd /path/to/workdir

Rozpakuj plik, a następnie przenieś go gdzie indziej (więc nadal masz go jako kopię zapasową):

unsquashfs filesystem.squashfs
mv filesystem.squashfs /path/to/backup/

Wejdź squashfs-root, dodaj / zmodyfikuj według własnego gustu, a następnie utwórz ponownie filesystem.squashfs:

cd /path/to/workdir
mksquashfs squashfs-root filesystem.squashfs -b 1024k -comp xz -Xbcj x86 -e boot

skopiuj nowo utworzony filesystem.squashfsna istniejący na dysku USB, np .:

cp filesystem.squashfs /mnt/clonezilla/live/

następnie uruchom ponownie i użyj LIVE USB.

Uwaga: powyższe polecenia są częścią squashfs-tools.

don_crissti
źródło
Działa to świetnie, ale niestety dostaję wiadomość dla wszystkich głównych katalogów, które mi mówią Source directory entry bin already used! - trying bin_1. Rzeczywiście, w moim systemie plików wyjściowych mam a /bini /bin_1zamiast scalania folderu. Jakieś pomysły? Jeśli uruchomię z -noappend,systemem plików, po prostu nie działa.
Naftuli Kay
1
@TKKocheran - Nie otrzymuję żadnego z tych błędów po dodaniu niestandardowego skryptu /usr/bini ponownym przepakowaniu mksquashfs. Dysk USB uruchamia się dobrze i mogę używać skryptu z sesji na żywo. Upewnij się, że nie masz już starego filesystem.squashfsw tym samym katalogu ze zmodyfikowanym squashfs-rootprzed uruchomieniem mksquashfs.
don_crissti
@Naftuli: Wygląda na to, że pominąłeś krok „mv ... backup /”.
Joachim Wagner
Czy to nie działa w (fałszywy) root? Już po rozpakowaniu otrzymuję błądcreate_inode: could not create character device squashfs-root/dev/audio, because you're not superuser!
Wilf
@ Wilf - nie możesz tworzyć plików urządzeń ( squashfs-root/dev/*) jako zwykły użytkownik, potrzebujesz uprawnień roota.
don_crissti
5

Jeśli twój system obsługuje jakiś system plików uION , taki jak aufs lub overlayfs , nie musisz wyodrębniać oryginalnego pliku squashfs.

Na przykład używany jest overlayfs (opcja jądra, aby go włączyć): Możesz zamontować plik squashfs.file w / fm lub w innym miejscu jako pierwszy. Przygotuj zapisywalny system plików z 2 katalogami, powiedz / to i / temp . przygotuj kolejny zapisywalny katalog / fin dla scalonych wyników. Zamontuj je razem jako nakładkę na swój system ---

mount -t overlay -o lowerdir=/fm,upperdir=/to,workdir=/temp overlay /fin

Teraz możesz dodawać / modyfikować pliki w / fin . Po wykonaniu wszystkich czynności możesz przenieść mksquashfs / fin do nowego pliku squashfs,

mksquashfs /fin newfile; umount /fin

, a następnie wyczyść / odmontuj wszystkie inne używane katalogi, jak chcesz.

W squashfs i niektóre unionfs są powszechnie używane przez live-cd .

Zhi-Ming Chen
źródło
Jeśli usuniesz plik z zamontowanego / płetwy, czy zostanie on usunięty z twoich końcowych squashfów?
localhost
2

Tutaj znalazłem inną odpowiedź:

bash# mount dir.sqsh /mnt/dir -t squashfs -o loop
Użytkownik
źródło
7
Powyższe polecenie spowoduje zamontowanie go w trybie tylko do odczytu, co jest lepsze niż całkowite nie montowanie go; Niestety, nie jest to pełna odpowiedź na pytanie.
harperville
Zgadzam się, że nie jest to pełna odpowiedź. Razem z unix.stackexchange.com/a/377269/27328 możesz zbudować odpowiedź, w której nie trzeba rozpakowywać systemu plików, aby go zmodyfikować - mniej miejsca, mniej czasu.
Użytkownik
Najprostsza metoda, działająca na CentOS 7
Seff
0

Użycie overlayfs, jak pokazano, jest najlepszym sposobem na uzyskanie pseudo „squashfs rw”; Wymaga to jednak uruchomienia na jądrze> 4.x (lub zaufanym Ubuntu> 14.x).

Alternatywnym rozwiązaniem, gdy siedzisz na starszej płycie CD bez nakładki / aufs / unionfs, jest wykorzystanie możliwości squashfsown

ważny:

 without unsquashfs, so this can be done on low storage system

przykład:

zmodyfikuj katalog „usr” squashfs

1    mount squashfs_file /mnt

2    cp -a /mnt/usr $HOME  ##modify whatever $HOME/usr as needed

3    mksquashfs /mnt new_squashfs_file -wildcards -e usr

4    mksquashfs $HOME/usr new_squashfs_file -keep-as-directory

5    umount /mnt  # cleanup

linia 3 buduje tymczasowo plik squashfs z wyłączeniem olddir_usr

wiersz 4 dołącza zmodyfikowany-usr-dir do pliku new_squashfsfile

zobacz tutaj dodaj squashfs Dołącz do podkatalogu w pliku squashfs

użytkownik3477652
źródło