어제 우리 컴퓨터 중 하나가 껍질을 잃어버렸습니다. grub
솔직히 말해서 우리가 컴퓨터를 열었을 때 그것이 어떤 껍질인지 확신할 수 없었습니다.
이는 불일치로 인해 루트 파일 시스템 등을 마운트할 수 없음을 나타냅니다.
나는 달렸고 믿었습니다.
fsck -fy /dev/sda2
다시 시작하면 문제가 사라집니다.
질문 부분은 다음과 같습니다.
나는 이미 그녀의 루트 crontab에 있습니다.
@reboot /home/ruzena/Development/bash/fs-check.sh
그리고 스크립트에는 다음이 포함됩니다.
#!/bin/bash
touch /forcefsck
그러고 보니 이렇게 짧은 명령어에 대한 스크립트 파일을 왜 만들었는지는 모르겠지만 어쨌든...
또한 파일에서:
/etc/default/rcS
나는 다음을 정의했습니다:
FSCKFIX=yes
그래서 이해가 안 돼요. 어떻게 이런 일이 일어날 수 있습니까?
부팅 시 루트 파일 시스템 검사(및 선택적 복구)를 강제하려면 어떻게 해야 합니까?
아니면 이 두 가지가 내가 할 수 있는 가장 큰 일인가?
운영 체제:리눅스 민트 18.x 시나몬 64비트.
fstab
:
cat /etc/fstab | grep ext4
보여주다:
UUID=a121371e-eb12-43a0-a5ae-11af58ad09f4 / ext4 errors=remount-ro 0 1
grub
:
fsck.mode=force
grub
구성 에 추가되었습니다 .
답변1
ext4
시작 시 파일 시스템 확인
테스트 운영 체제: 가상 머신의 Linux Mint 18.x
기본 정보
/etc/fstab
순서 fsck
는 마지막(6번째) 열입니다. 예를 들면 다음과 같습니다.
<file system> <mount point> <type> <options> <dump> <fsck>
UUID=2fbcf5e7-1234-abcd-88e8-a72d15580c99 / ext4 errors=remount-ro 0 1
FSCKFIX=yes
변수/etc/default/rcS
이렇게 하면 fsck가 자동으로 복구되도록 변경되지만,아니요fsck 검사를 강제합니다.
에서 man rcS
:
FSCKFIX When the root and all other file systems are checked, fsck is invoked with the -a option which means "autorepair". If there are major inconsistencies then the fsck process will bail out. The system will print a message asking the administrator to repair the file system manually and will present a root shell prompt (actually a sulogin prompt) on the console. Setting this option to yes causes the fsck commands to be run with the -y option instead of the -a option. This will tell fsck always to repair the file systems without asking for permission.
~에서man tune2fs
If you are using journaling on your filesystem, your filesystem will never be marked dirty, so it will not normally be checked.
에서 시작하다
다음을 설정하세요
FSCKFIX=yes
파일에
/etc/default/rcS
fs가 마지막으로 확인된 시간을 확인하고 기록해 두십시오.
sudo tune2fs -l /dev/sda1 | grep "Last checked"
이 두 가지 옵션은 작동하지 않습니다
-F
(강제fsck
재시작) 인수를 다음으로 전달합니다shutdown
.shutdown -rF now
아니요. 다음을 참조하세요
man shutdown
./forcefsck
빈 파일 추가 :touch /forcefsck
스크립트는 다음을 사용하는 것 같습니다.
/etc/init.d/checkfs.sh /etc/init.d/checkroot.sh
했다아니요재부팅 후 작동하지만 파일이 삭제되었습니다.
확인됨:
sudo tune2fs -l /dev/sda1 | grep "Last checked" sudo less /var/log/fsck/checkfs sudo less /var/log/fsck/checkroot
이는 스크립트의 로그인 것으로 보입니다
init
.
반복합니다. 두 옵션 모두 작동하지 않습니다!
두 가지 방법 모두 작동합니다.
systemd-fsck커널 부팅 스위치
기본
grub
구성 파일을 편집합니다.sudoedit /etc/default/grub
GRUB_CMDLINE_LINUX="fsck.mode=force"
sudo update-grub sudo reboot
이것은 파일 시스템 검사를 수행했으며 다음을 통해 확인되었습니다.
sudo tune2fs -l /dev/sda1 | grep "Last checked"
참고: 이했다확인하십시오. 그러나 강제로 수리하려면
fsck.repair="preen"
, 또는 를 지정해야 합니다fsck.repair="yes"
.tune2fs
실행 전 파일 시스템 마운트 수를 설정 하는 데 사용됩니다fsck
.man tune2fs
tune2fs' info is kept in the file system superblock
-c
스위치는 fs를 확인하기 전에 fs를 마운트할 횟수를 설정합니다.sudo tune2fs -c 1 /dev/sda1
확인하다:
sudo tune2fs -l /dev/sda1
이것했다입증된 작업:
sudo tune2fs -l /dev/sda1 | grep "Last checked"
일반화하다
fsck
Linux Mint 18.x에서 부팅할 때마다 강제로 실행 하려면 tune2fs
, 또는 fsck.mode=force
및 선택적 fsck.repair=preen
/ fsck.repair=yes
커널 명령줄 스위치를 사용하세요.
답변2
기존 답변에 대한 추가 조사 및 업데이트
위의 내용이 여전히 작동하는지 지금 확인하고 싶습니다.Ubuntu 20.04/22.04-LTS 기반 시스템(Linux Mint 20/21 Cinnamon amd64 데스크탑 및 Ubuntu MATE 20.04/22.04 amd64 데스크탑 에서 직접 테스트 ), 몇 가지 사실을 발견했습니다. 파일 시스템 확인 간격 ~#
부터 시작하겠습니다. 명령 앞):
파일 시스템 확인 간격
~# LC_ALL=C tune2fs -l /dev/nvme0n1p2 | grep 'Check interval'
Check interval: 0 (<none>)
글쎄, 이건 예상치 못한 일이었어. 이 문제가 해결된 줄 알았는데 해결이 너무 쉽네요. 인수로 사용되는 숫자의 기본값은 일이므로 1이 아닌 1s(1초)를 사용해야 합니다. 이는 1일(86400초)을 의미합니다.
~# LC_ALL=C tune2fs -i 1s /dev/nvme0n1p2
tune2fs 1.45.5 (07-Jan-2020)
Setting interval between checks to 1 seconds
이제 위의 확인을 반복하면 다음과 같은 결과를 얻습니다.
Check interval: 1 (0:00:01)
물론 이것이 매초마다 파일 시스템을 검사한다는 의미는 아닙니다. 대신 실제로 모든 파일 시스템 마운트에서 파일 시스템 검사를 강제합니다. (어떤 시스템이든 1초에 두 번 부팅할 수 있는 방법은 없기 때문에