Почему LiveUSBs используют squashfs (и подобный) файловые системы?

[1122972]Я добавил об этом в баг-отчёт (старый, но всё ещё актуальный) в Ubuntu. [12135]https://bugs.launchpad.net/ubuntu/+source/openssh/+bug/424371[12136]Я предложил изменить значение по умолчанию на No и добавить более новую документацию:[12137]
2
20.10.2014, 19:56
3 ответа

Сначала необходимо проверить, подключен ли процесс к терминалу.

$ ps -eo comm,tty | grep fsck

Теперь, если вы по-прежнему можете видеть значение TTY рядом с вашим процессом, вы по-прежнему можете получить его вывод (из этого TTY). Текущий идентификатор TTY можно получить с помощью tty . Однако, если рядом с вашим процессом есть ? , боюсь, вы не сможете получить его вывод в любом случае (если вы не использовали что-то вроде экрана ).

Если процесс все еще подключен к работающему терминалу, можно вернуть процесс на передний план с помощью fg (в этом терминале, конечно):

$ jobs
$ fg [job ID]

задания выдадут идентификатор, связанный с запущенным процессом fsck.ext4 . Затем используйте его при вызове fg . Можно также вызвать fg без аргументов, если в фоновом режиме имеется только одно задание.

Я не знаком с fsck.ext4 , но используемый вами переключатель -t , похоже, печатает статистику (отредактируйте: также как и параметр -C 0 ). Вернув процесс на передний план, вы получите этот вывод обратно. Однако, если fsck.ext4 не был запущен с подробными параметрами, он не будет печатать ничего, независимо от того, находится ли он на переднем плане или в фоновом режиме. В этом случае можно просто проверить, выполняется ли он по-прежнему с помощью ps .

Когда вы закончите, просто нажмите Ctrl + Z , чтобы снова отправить процесс в фоновом режиме. Будьте осторожны, если процесс подключен к терминалу (то есть, если программа принадлежит сеансу управления терминала), то закрытие терминала отправит SIGHUP процессу и убьет его (если только вы не заставили fsck.ext4 игнорировать SIGHUP ).

-121--139948-

Следующее, кажется, работает просто хорошо в моем sh :

$ myvar="test"
$ echo "My var is $myvar."
My var is test.

Нет необходимости эхо значение переменной и поймать его снова в другой. Вот немного больше информации о назначениях переменных .

Объект , OSTYPE не определен в среде sh . Вам придется передать его при выполнении сценария. Так что, вместо того, чтобы бежать...

$ /bin/sh yourscript.sh
or
$ ./yourscript.sh

Необходимо выполнить:

$ OSTYPE=$OSTYPE /bin/sh yourscript.sh
or
$ OSTYPE=$OSTYPE ./yourscript.sh

Конечно, предполагается, что родительская оболочка, в которой вводится приведенная выше команда, имеет переменную OSTYPE . В то время как bash делает, это не случай каждой оболочки. Вместо $ OSTYPE можно использовать uname :

$ OS=$(uname -o)
$ echo "My OS is $OS."
My OS is GNU/Linux.
$ echo "My OS is $(uname -o)."
My OS is GNU/Linux.

На моей машине для переменной OS устанавливается значение GNU/Linux , а не linux-gnu (которое является содержимым моего OSTYPE ).

В качестве побочной заметки я предполагаю, что эквивалент вашего кода может быть:

$ myvar="$(echo $OSTYPE)"
$ echo "My var is $myvar."
My var is linux-gnu
-121--244812-

Основная причина заключается в том, что распакованный образ при загрузке расширится сам собой,но где?

Если бы он находился в ОЗУ, компьютер мог бы его не хватить, чтобы сделать так. Но если бы это было сделано на USB ключ сам на ext4 раздел, «образ» не будет больше нетронутым, так как файл написаны на том же разделе.

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

1
27.01.2020, 22:13

squashfs работает быстрее, особенно с медленными носителями, такими как флэш-память USB.
Загрузка из squashfs производит меньше операций ввода-вывода, поскольку данные эффективно сжимаются, а метаданные не так сложны.

У squashfs есть ряд недостатков: он требует много ресурсов процессора, не позволяет изменять данные, поэтому широко не используется на настольных компьютерах, но хорошо подходит для таких задач, как liveUSB.

1
27.01.2020, 22:13

Squashfs часто используется в сочетании с объединением FS (overlayfs, aufs )для создания неизменяемых живых изображений.

Это означает, что образ squashfs монтируется только для чтения, а tmpfs монтируется для чтения. Затем мы собираем эти два слоя и монтируем их как объединение на /. Эти шаги по сборке и монтированию обычно выполняются в initramfs перед chroot в собранную корневую файловую систему.

Все обращения только для чтения осуществляются непосредственно к образу squashfs, в то время как все изменения фиксируются в tmpfs, в RAM, volatile, так что при следующей загрузке образ останется без изменений.

ИМХО, использование функции чтения и записи squashfs менее актуально. В этом случае, если у вас действительно нет ограничений по пространству, вам следует использовать ext4, как вы предложили.

3
14.11.2020, 10:02

Теги

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