1

Я использую тестирование Debian, и у меня есть файл, это контейнер LUKS с файловой системой ext4. Моя система монтирует его при каждой загрузке. Для этого мне пришлось использовать три следующих файла:

/ И т.д. / crypttab

sda2_crypt     UUID=727fa348-8804-4773-ae3d-f3e176d12dac   none        luks
crypt_dropbox   /media/Server/Dropbox/luks_dropbox          sda2_crypt  luks,keyscript=/lib/cryptsetup/scripts/decrypt_derived,noauto

/ И т.д. / Fstab

# dropbox
UUID=0d959e74-ec19-43bf-b779-60134c676aef   /media/Dropbox  ext4    defaults,noauto,user,nofail,noatime,commit=20   0 2

/etc/rc.local

cryptdisks_start crypt_dropbox
mount /media/Dropbox

Контейнер не может быть открыт и смонтирован автоматически при загрузке через /etc/crypttab + /etc/fstab потому что том dropbox находится в разделе и должен быть открыт перед монтированием раздела. Итак, вот почему есть noauto в / и /etc/crypttab Файловая система внутри этого контейнера также не может быть смонтирована с помощью mount -a (по крайней мере, при загрузке), потому что устройства пока нет. Опция nofail существует для подавления ошибки "нет устройства". И первый этап завершен. Второй этап - когда загрузка завершена, поэтому я использовал /etc/rc.local . Первая строка открывает без пароля (из-за настроек в / etc / crypttab) том dropbox, вторая монтирует его через / etc / fstab. И это работает.

Ошибка возникает, когда система пытается размонтировать раздел, на котором находится том Dropbox. Я не знаю точно, почему, но это может быть из-за того, что файловая система тома dropbox заблокирована, или, возможно, контейнер открыт, или даже потому, что устройство loop0 все еще активно. Чтобы полностью закрыть том Dropbox, я должен использовать следующие команды:

umount /media/Dropbox
cryptdisks_stop crypt_dropbox
losetup -d /dev/loop0

Есть ли способ сделать это только когда система выключается, но перед размонтированием любого другого раздела? Есть ли файл, куда я могу вставить эти команды, похожий на /etc/rc.local?

1 ответ1

2

Специфика будет зависеть от того, какой именно дистрибутив вы используете и как он настроен, но рисование очень широкой кистью: когда система Linux выходит из строя, она входит либо в уровень выполнения 0 (завершение работы), либо 6 (перезагрузка).

При переключении уровней запуска процесс init выполнит сценарии "kill" и "start" для введенного уровня запуска.

Вы можете добавить свои собственные сценарии для выполнения произвольных команд при вводе заданного уровня выполнения. Например, чтобы добавить скрипт в Debian, который запускается во время подготовки системы к перезагрузке, создайте скрипт оболочки /etc/init.d/my-reboot-prepare-script с любыми командами, которые вам нравятся (посмотрите на другие скрипты в этом каталог для некоторых деталей о том, как это сделать), а затем добавьте к нему символическую ссылку из /etc/rc6.d/K00my-reboot-prepare-script . K в начале вызовет скрипт для "остановки" рассматриваемого процесса с параметром stop .

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .