Монтирование файловой системы squashfs в режиме чтения-записи


45

У меня есть установка Clonezilla на USB-накопитель, и я хотел бы внести некоторые изменения в операционную систему. В частности, я хотел бы вставить исполняемый скрипт, /usr/sbinчтобы упростить запуск собственной команды резервного копирования, чтобы сделать резервное копирование менее болезненным.

Основная файловая система находится /live/filesystem.squashfsв разделе USB FAT-32.

Как я могу смонтировать это чтение / запись на моем компьютере с Linux, чтобы иметь возможность добавлять / удалять / изменять файлы? Я использую производную Ubuntu 12.04.

Ответы:


38

В качестве пользователя root скопируйте filesystem.squashfsв какой-нибудь пустой каталог , например:

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

Распакуйте файл и переместите его куда-нибудь еще (чтобы он оставался в резервной копии):

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

Зайдите squashfs-root, добавьте / измените по своему вкусу, затем воссоздайте filesystem.squashfs:

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

скопируйте вновь созданный filesystem.squashfsповерх существующего на USB-накопитель, например:

cp filesystem.squashfs /mnt/clonezilla/live/

затем перезагрузите компьютер и используйте LIVE USB.

Примечание: вышеуказанные команды являются частью squashfs-tools.


Это прекрасно работает, но, к сожалению, я получаю сообщение для всех корневых каталогов, говорящих мне Source directory entry bin already used! - trying bin_1. Конечно же, в моей выходной файловой системе у меня есть a /binи a /bin_1, а не слияние папки. Любые идеи? Если я запускаю с -noappend,файловой системой просто не работает.
Нафтули Кей

1
@TKKocheran - Я не получаю здесь ни одной из этих ошибок после добавления собственного скрипта /usr/binи перепаковки mksquashfs. USB-накопитель загружается нормально, и я могу использовать свой сценарий из прямой сессии. Перед запуском убедитесь, что у вас больше нет старых filesystem.squashfsв той же директории, в которой находится ваш измененный . squashfs-rootmksquashfs
don_crissti

@Naftuli: Вы, кажется, пропустили шаг "mv ... backup /".
Иоахим Вагнер

Это работает не под (фальшивым) рутом? Просто после извлечения я получаю ошибкуcreate_inode: could not create character device squashfs-root/dev/audio, because you're not superuser!
Уилф

@Wilf - вы не можете создавать файлы устройства ( squashfs-root/dev/*) как обычный пользователь, вам нужны права root.
don_crissti

5

Если ваша система поддерживает некоторую файловую систему uion, такую ​​как aufs или overlayfs , вам не нужно извлекать исходный файл squashfs.

Например, используется overlayfs (опция ядра для его включения): вы можете сначала смонтировать файл squashfs.file в / fm или куда-то еще. Подготовьте доступную для записи файловую систему с двумя каталогами, скажем, / to и / temp . подготовить другой доступный для записи каталог / fin для объединенных результатов. Смонтируйте их вместе в качестве наложений на вашу систему ---

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

Теперь вы можете добавлять / изменять файлы в / fin . После того, как все сделано, вы можете mksquashfs / fin в новый файл squashfs,

mksquashfs /fin newfile; umount /fin

, затем очистите / размонтируйте все остальные используемые каталоги, как хотите.

В SquashFS и некоторые UnionFS обычно используются для живого кд .


Если вы удалите файл из смонтированного / fin, будет ли он удален из финального сквоша, который вы создадите?
localhost

2

Здесь я нашел другой ответ:

bash# mount dir.sqsh /mnt/dir -t squashfs -o loop

7
Приведенная выше команда будет монтировать только для чтения, что лучше, чем вообще не монтировать; увы, не полный ответ на поставленный вопрос.
Harperville

Я согласен, что это не полный ответ. Вместе с unix.stackexchange.com/a/377269/27328 вы можете создать ответ, в котором вам не нужно распаковывать файловую систему, чтобы изменить ее - меньше места, меньше времени.
Пользователь

Самый простой метод, работавший на CentOS 7
Seff

0

Использование оверлеев, как показано, - лучший способ получить псевдо "squashfs rw"; Однако для этого необходимо запустить ядро> 4.x (или верное ubuntu> 14.x).

Альтернативное решение, когда вы сидите на старом live cd без каких-либо оверлеев / aufs / unionfs, - это использовать возможности squashfs'own

важный:

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

пример:

изменить каталог "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

строка 3 строит временно squashfsfile, исключая olddir_usr

В строке 4 добавляется измененный-usr-dir в файл new_squashfsfile.

см. здесь append squashfs Добавить в подкаталог в файле squashfs

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.