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

Использовать trap:

$ seq 40 | xargs -i --max-procs=4 bash -c \
 'trap "echo erk; exit 1" INT TERM;  sleep 10; date +"%H:%M:%S {}";' fnord
16:07:39 2
16:07:39 4
erk
16:07:39 1
^C
erk
erk
erk
erk

Кроме того, переключатель от оболочки до другого языка, на котором можно также установить обработчики сигналов.

Обратите внимание также на это после bash -c foo.. необходимо указать значение это $0 должен взять (здесь, fnord) так, чтобы первое слово, произведенное seq не становится съеденным.

47
21.06.2013, 22:57
5 ответов

Как корень, копия filesystem.squashfs к некоторому пустому dir, например:

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 по существующему на Вашей Карте памяти, например:

cp filesystem.squashfs /mnt/clonezilla/live/

затем перезагрузка и использование Ваш ЖИВОЙ USB.

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

41
27.01.2020, 19:34
  • 1
    Это работает отлично, но к сожалению, я получаю сообщение для всех корневых каталогов, говоря мне Source directory entry bin already used! - trying bin_1. Конечно же, в моей выходной файловой системе, у меня есть a /bin и a /bin_1, вместо того, чтобы объединять папку. Какие-либо идеи? Если я работаю с -noappend, файловая система просто не работает. –  Naftuli Kay 23.06.2013, 22:25
  • 2
    @TKKocheran - Я не получаю ни одной из тех ошибок здесь после включения пользовательского сценария /usr/bin и переупаковка с mksquashfs. Карта памяти загружается прекрасный, и я могу использовать свой сценарий от живой сессии. Удостоверьтесь, что у Вас больше нет старого filesystem.squashfs в том же каталоге с Вашим измененным squashfs-root перед выполнением mksquashfs. –  don_crissti 23.06.2013, 22:53

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

bash# mount dir.sqsh /mnt/dir -t squashfs -o loop
2
27.01.2020, 19:34

Если ваша система поддерживает файловую систему 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 обычно используются для live -cd .

9
27.01.2020, 19:34

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

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

Важно:Без unsquashfs, поэтому это можно сделать на системе с низким объемом памяти

Пример:

Изменить каталог usr в squashfs

mount squashfs_file /mnt    # 1
cp -a /mnt/usr $HOME        # 2  Modify whatever $HOME/usr as needed
mksquashfs /mnt new_squashfs_file -wildcards -e usr   # 3
mksquashfs $HOME/usr new_squashfs_file -keep-as-directory # 4
umount /mnt  # 5  Cleanup

Строка 3 временно создает squashfsfile, исключая olddir _usr
Строка 4 добавляет измененный -usr -dir в новый _squashfsfile

См. здесь добавить squashfs

0
27.01.2020, 19:34

Примечание :вопрос написан в 2013 году, сейчас 2021 год, я предполагаю, чтоoverlayfs(поддерживается одна из unionfsфайловых систем ). Этот ответ в основном представляет собой слияние двух других ответов с некоторыми явно написанными вещами, опытные пользователи Linux могут увидеть что-то столь же очевидное (, как использование sudo), но не все находятся на этом уровне, я понял некоторые вещи по пути и написание полных инструкций (IMO ). Тексты после #являются комментариями, копировать их не нужно, в моей системе bashих спокойно игнорирует.

cd somefolder # some folder, no need for much free space, enough for modified data only
mkdir fm # for mounting original
mkdir to # for upper unionfs layers
mkdir temp # some overlayfs technical folder
mkdir fin # resulting folders/files would be there

sudo mount /full_path/filesystem.squashfs fm -t squashfs -o loop
sudo mount -t overlay -o lowerdir=fm,upperdir=to,workdir=temp overlay fin

Теперь можно изменять/добавлять/удалять файлы/папки в папках «to» или «fin». Изменения в них «отражаются».
Чтобы отменить удаление исходного файла, удалите «удаленный» файл из «до» с помощью sudo rm path/file.
После внесения изменений, чтобы создать новый файл squashfsв папке с полным _путем, там должно быть свободное место:

sudo mksquashfs fin /full_path/filesystem.squashfs 

Когда рабочие файлы больше не нужны:

sudo umount fin
sudo umount fm
sudo rm -R fm fin temp to

П.С. После изменения на quashfsя хотел воссоздать файл isoсовременного дистрибутива, который поддерживает как устаревшую загрузку, так и загрузку EFI. Почему некоторые опции нижеприведенной команды genisoimageкритичны, я не знаю, для меня это был пробный -и -ошибочный путь. Загружается как EFI, так и устаревшая версия, однако запуск iso отличается :запуск 33 ed 90вместо 45 52 08, например. mjg59.dreamwidth.org/11285.html намекает мне, что поддержка Apple отсутствует.

mkdir iso,efi

sudo losetup --partscan --show --find original.iso

# if output of previous loop0
sudo mount /dev/loop0p1 iso
sudo mount /dev/loop0p2 efi # not necessary, just to see contents

sudo mount -t overlay -o lowerdir=iso,upperdir=to,workdir=temp overlay fin

Замените то, что необходимо в fin. Сначала сделал sudo dd if=/dev/loop0p2 fin/EFI/BOOT/usb.efi, чтобы сделать образ для efi, потом обнаружил, что он уже есть в папке grub. Если взять доступный образ efi,чем losetup+mount /dev/loopшагов можно заменить более простымиsudo mount original.iso iso

sudo genisoimage -lJr -o new.iso -b isolinux/isolinux.bin -c isolinux/boot.cat -no-emul-boot -boot-load-size 4 --boot-info-table -eltorito-alt-boot -e boot/grub/efi.img -no-emul-boot fin

sudo isohybrid --uefi new.iso
0
28.11.2021, 01:27

Теги

Похожие вопросы