Используется ли `/ etc / fstab` для перемонтирования дисков?

9

У меня установлено устройство с Ubuntu 14.04.5, которое имеет один жесткий диск с файловой системой ext4.

Прочитав документ Ext4 Filesystem, я узнал, что режим данных по умолчанию - orderedэто защита только метаданных. В моем проекте мы хотим изменить его на journalзащиту данных файла, потому что безопасность данных имеет большую ценность.

Первым делом я попытался изменить /etc/fstabфайл. Я пытался изменить

UUID=<UUID> / ext4 errors=remount-ro 0 1

в

UUID=<UUID> / ext4 errors=remount-ro,data=journal 0 1

добавив data=journalв поле опции.

Однако, когда я перезагружаю устройство, я получаю сообщение об ошибке cannot change data mode on remount. Я проверил dmesgи увидел более раннее сообщение о монтировании диска в orderedрежиме данных.

Я думал, что в течение /etc/fstabдовольно долгого времени используется для переопределения параметров монтажа по умолчанию, поэтому диски монтируются только один раз. Но теперь это выглядит неправильно: диск монтируется с использованием параметров монтирования по умолчанию, а затем /etc/fstabподбирается для его повторной установки.

Мои вопросы :

  • Является ли этот процесс «монтирования-перемотки» процессом проектирования системы? Я прочитал Fstabвики-страницу, но не увидел, что там упоминается «mount-remount».
  • Если /etc/fstabдействительно используется для повторного монтажа, на каком этапе процесса загрузки привод монтируется впервые? Это реализовано в /etc/init.d? Я видел некоторые скрипты в /etc/init.dcall umountfsи umountroot, но, просматривая их содержимое, они не выглядят актуальными.
yaobin
источник
2
Я думаю, что это проблема "курицы и яйца", упомянутая здесь ( /etc/fstabнаходится в корневой файловой системе, но не может быть прочитана до тех пор, пока файловая система не будет смонтирована): initramfs использует / etc / fstab?
Стальной водитель

Ответы:

8

От man ext4:

Данные = {журнал | заказать |} обратной записи
              Определяет режим ведения журнала для данных файла. Метаданные всегда
              журналируемый. Использовать режимы, отличные от упорядоченных в корневой файловой системе.
              например, передайте режим ядру в качестве параметра загрузки, например, root-
              флаги = данные = журнал.

Удалите data=orderedиз вашей fstab-линии и редактируйте /etc/default/grubвместо этого. На /etc/default/grubсмену линии

GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"

в

GRUB_CMDLINE_LINUX_DEFAULT="quiet splash root‐flags=data=journal"

запустить sudo update-grubи перезагрузить.

mook765
источник
5

Когда используется / etc / fstab

Если вы запустите, sudo strace -e open,openat mount -o remount,rw /вы увидите, что команда действительно открывается /etc/fstab. Это самая распространенная команда, которую вы видите, на которую часто ссылаются в статьях по работе с оболочкой восстановления.

Чтобы также процитировать ответ Sourcejedi (который взят из mount(8)руководства):

mount -o remount, rw / dir

После этого вызова mount читает fstab и объединяет эти параметры с параметрами из командной строки (-o) . Если в fstab не найдена точка монтирования, разрешается перемонтирование с неопределенным источником.

Тем не менее, это не значит, что /etc/fstabвсегда используется. В частности, когда вы также указываете файл устройства; ссылка на mount(8)руководство :

Функциональность remount следует стандартному способу работы команды mount с параметрами из fstab. Это означает, что команда mount не читает fstab (или mtab), только когда устройство и dir полностью указаны.

mount -o remount, rw / dev / foo / dir

После этого вызова все старые параметры монтирования заменяются, и произвольный материал из fstab игнорируется , кроме параметра loop =, который генерируется и поддерживается командой mount.

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

На /etc/fstabнего также не ссылаются при монтировании /файловой системы во время загрузки, о котором ядро ​​ничего не знает /etc/fstab. Процитирую ответ псуси :

В конце концов появились загрузчики, которые могли передать командную строку ядру. Если аргумент root = был передан, это говорит ядру, где корень fs находится вместо встроенного значения. Драйверы, необходимые для доступа, должны быть встроены в ядро.

...

Наконец, сегодня у нас есть initramfs. Это похоже на initrd, но вместо сжатого образа файловой системы, загружаемого в виртуальный диск, это сжатый архив cpio. Tmpfs монтируется как корень, и архив там извлекается. Вместо использования pivot_root, который считался грязным хаком, загрузочные скрипты initramfs монтируют настоящий корень в / root, удаляют все файлы в корне tmpfs, затем выполняют chroot в / root и exec / sbin / init

Файловые системы, которые не нуждаются в fstab

Также обратите внимание, что ядро ​​Linux имеет другие файловые системы, которые находятся в памяти - они обычно недоступны пользователям, некоторые из которых вообще не имеют точки монтирования, в то время как другие открыты для пользователей. Ядро не должно ссылаться /etc/fstabна них. Примером этого является /proc- это виртуальная файловая система, которая предоставляет в основном информацию о процессах, а также некоторые сведения об оборудовании и системе, которые должны быть в /sysдругой виртуальной файловой системе.

Сергей Колодяжный
источник