Czy `/ etc / fstab` służy do ponownego montażu dysków?

9

Mam zainstalowane urządzenie z Ubuntu 14.04.5, które ma jeden dysk twardy z systemem plików ext4.

Czytając dokument System plików Ext4 dowiedziałem się, że domyślnym trybem danych jest orderedtylko ochrona metadanych. W moim projekcie chcemy to zmienić, aby journalchronić również dane plików, ponieważ bezpieczeństwo danych ma większą wartość.

Pierwszą rzeczą, którą próbowałem, była modyfikacja /etc/fstabpliku. Próbowałem się zmienić

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

do

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

dołączając data=journaldo pola opcji.

Jednak po ponownym uruchomieniu urządzenia pojawił się komunikat o błędzie cannot change data mode on remount. Sprawdziłem dmesgi zobaczyłem wcześniejszy komunikat o montażu napędu w orderedtrybie danych.

Przez żenująco długi czas uważałem, że /etc/fstabjest używany do zastąpienia domyślnych opcji montażu, więc dyski są montowane tylko raz. Ale teraz wygląda to źle: dysk jest montowany przy użyciu domyślnych opcji montowania, a następnie /etc/fstabpodnoszony w celu ponownego zamontowania .

Moje pytania to :

  • Czy ten proces „mount-remout” jest projektem systemu? Przeczytałem Fstabstronę wiki, ale nie widziałem, żeby wspomniała o rzeczy „mount-remount”.
  • Jeśli /etc/fstabnaprawdę jest używany do ponownego montażu , w którym etapie procesu uruchamiania dysk jest montowany po raz pierwszy? Czy to jest zaimplementowane w /etc/init.d? Widziałem niektóre skrypty w /etc/init.dnazwie umountfsi umountroot, ale przeglądając ich zawartość, nie wyglądają na odpowiednie.
yaobin
źródło
2
Myślę, że jest to wspomniany tutaj problem „kurczaka i jajka” ( /etc/fstabrezyduje w głównym systemie plików, ale nie można go odczytać, dopóki nie zostanie zamontowany system plików): Czy initramfs używa / etc / fstab?
steeldriver

Odpowiedzi:

8

Od man ext4:

data = {dziennik | zamówiony | zapis zwrotny}
              Określa tryb kronikowania danych pliku. Metadane są zawsze
              zaksięgowane. Aby użyć trybów innych niż uporządkowane w głównym systemie plików
              tem, przekaż tryb do jądra jako parametr rozruchowy, np. root-
              flagi = dane = dziennik.

Usuń data=orderedz linii fstab i edytuj /etc/default/grubzamiast tego. W /etc/default/grubdokonać korekty

GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"

do

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

uruchom sudo update-grubi uruchom ponownie.

mook765
źródło
5

Gdy używany jest plik / etc / fstab

Po uruchomieniu sudo strace -e open,openat mount -o remount,rw /zobaczysz, że polecenie faktycznie się otwiera /etc/fstab. Jest to najczęstsze polecenie, które zobaczysz, często przywoływane w artykułach na temat pracy z powłoki odzyskiwania.

Cytując również odpowiedź sourcejedi (która pochodzi z mount(8)instrukcji):

mount -o remount, rw / reż

Po tym wywołaniu mount odczytuje fstab i łączy te opcje z opcjami z linii poleceń (-o) . Jeśli w fstab nie zostanie znaleziony punkt montowania, dozwolone jest ponowne podłączenie z nieokreślonym źródłem.

Nie oznacza /etc/fstabto jednak, że zawsze jest używany. W szczególności, gdy podasz również plik urządzenia; odniesienie do mount(8)instrukcji :

Funkcja remount działa zgodnie ze standardowym sposobem działania polecenia mount z opcjami z fstab. Oznacza to, że polecenie mount nie odczytuje fstab (lub mtab) tylko wtedy, gdy urządzenie i katalog są w pełni określone.

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

Po tym wywołaniu wszystkie stare opcje montowania są zastępowane, a arbitralne rzeczy z fstab są ignorowane , z wyjątkiem opcji loop =, która jest generowana wewnętrznie i obsługiwana przez komendę mount.

Ma to sens, ponieważ /dirmoże być arbitralne - ponowne podłączenie urządzenia do innego punktu montowania.

Nie /etc/fstabodnosi się to również do montowania /systemu plików w jądrze podczas rozruchu /etc/fstab. Cytując odpowiedź psusi :

W końcu pojawiły się programy ładujące i mogły przekazać wiersz poleceń do jądra. Jeśli przekazano argument root =, informowało to jądro, gdzie znajduje się root fs, zamiast wbudowanej wartości. Sterowniki wymagały dostępu, które wciąż musiały być wbudowane w jądro

...

Wreszcie, dzisiaj mamy initramfs. Jest to podobne do initrd, ale zamiast być skompresowanym obrazem systemu plików ładowanym do ramdysku, jest to skompresowane archiwum CPIO. Tmpfs jest montowany jako root, a archiwum jest tam rozpakowywane. Zamiast używać pivot_root, który był uważany za brudny hack, skrypty startowe initramfs montują prawdziwy root w / root, usuwają wszystkie pliki z root tmpfs, następnie chroot do / root i exec / sbin / init

Systemy plików, które nie potrzebują fstab

Zauważ też, że jądro Linuksa ma inne systemy plików, które znajdują się w pamięci - nie są one normalnie dostępne dla użytkowników, niektóre z nich w ogóle nie mają punktu montowania, a niektóre są udostępniane użytkownikom. Jądro nie musi się do nich odwoływać /etc/fstab. Przykładem tego jest /proc- wirtualny system plików, który odsłania głównie informacje o procesach, a także pewne rzeczy dotyczące sprzętu i systemu, które powinny być w rzeczywistości /sys- inny wirtualny system plików.

Sergiy Kolodyazhnyy
źródło