ext4 파일 시스템이있는 단일 하드 드라이브가있는 Ubuntu 14.04.5와 함께 설치된 장치가 있습니다.
Ext4 파일 시스템 문서를 읽음으로써 기본 데이터 모드가 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
wiki 페이지를 읽었 지만 “mount-remount”에 대해서는 언급하지 않았다. /etc/fstab
실제로 다시 마운트하는 데 사용되는 경우 , 부팅 프로세스의 어느 단계에서 처음으로 드라이브가 마운트됩니까? 에 구현되어/etc/init.d
있습니까?/etc/init.d
이라는umountfs
및 에서 일부 스크립트를umountroot
보았지만 내용을 감추면 관련성이 없어 보입니다.
답변
보낸 사람 man ext4
:
data = {저널 | 순서 | 쓰기 백} 파일 데이터의 저널링 모드를 지정합니다. 메타 데이터는 항상 저널링. 루트 파일 시스템에서 주문한 것 이외의 모드를 사용하려면 tem, 부트 파라미터로 커널에 모드를 전달하십시오. flags = data = 저널.
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
하고 재부팅하십시오.
답변
/ 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)
매뉴얼 참조 :
다시 마운트 기능은 fstab의 옵션에서 mount 명령이 작동하는 표준 방식을 따릅니다. 즉, mount 명령은 장치와 dir이 완전히 지정된 경우에만 fstab (또는 mtab)을 읽지 않습니다.
mount -o remount, rw / dev / foo / dir
이 호출 후에 는 mount 명령으로 내부적으로 생성되고 유지 관리되는 loop = 옵션을 제외하고 모든 이전 마운트 옵션이 대체 되고 fstab의 임의 항목이 무시 됩니다.
때문에 이것은 의미가 /dir
임의의 수 – 다른 마운트 지점에 장치를 다시 마운트.
은 /etc/fstab
설치시도 참조되지 /
부팅시 커널에서 파일 시스템 것은 아무것도 알지 못한다 /etc/fstab
. psusi의 답변 을 인용하려면 :
결국 부트 로더가 나 왔으며 명령 행을 커널에 전달할 수있었습니다. root = 인수가 전달되면 커널에 루트 fs가 기본 제공 값 대신 사용 된 위치를 알려줍니다. 커널에 내장되어 있어야하는 액세스에 필요한 드라이버
…
마지막으로 오늘 우리는 initramfs를 가지고 있습니다. 이것은 initrd와 비슷하지만 램 디스크에로드되는 압축 파일 시스템 이미지 대신 압축 된 cpio 아카이브입니다. tmpfs가 루트로 마운트되고 아카이브가 여기에서 추출됩니다. 더러운 해킹으로 간주되는 pivot_root를 사용하는 대신 initramfs 부트 스크립트는 / root에 실제 루트를 마운트하고 tmpfs 루트의 모든 파일을 삭제 한 다음 chroot를 / root에 exec / sbin / init
fstab이 필요없는 파일 시스템
또한 리눅스 커널에는 메모리에 상주하는 다른 파일 시스템 이 있습니다.이 파일 시스템 은 사용자가 정상적으로 사용할 수 없으며, 일부는 마운트 포인트가 없으며 일부는 사용자에게 노출됩니다. 커널은 /etc/fstab
그것들 을 참조 할 필요가 없습니다 . 그 예로 /proc
는 대부분 프로세스에 대한 정보를 제공하는 가상 파일 시스템이며 실제로 /sys
다른 가상 파일 시스템에 있어야하는 하드웨어 및 시스템에 대한 정보를 제공합니다 .