Linux 서버에서는 대형 파티션(/dev/sdb1로 식별됨)을 암호화된 파일 시스템 전용으로 지정했습니다. 나는 그것을 사용하고 있다
losetup /dev/loop0 /dev/sdb1
cryptsetup -c aes -h sha512 create crypto /dev/loop0
mount /dev/mapper/crypto /var/crypto/db/
그리고 파티션을 마운트하고 사용하기 위한 긴 비밀번호도 있습니다. 새 커널 패키지를 설치하면 /usr/bin/os-prober가 실행됩니다. 내가 아는 한, OS 설치를 위해 각 파티션을 확인합니다. 분명히 /dev/sdb1에서는 소음만 발생하면서 실패합니다(물론 비밀번호가 있고 dmcrypt를 사용하지 않는 한).
내 시스템 로그에 따르면 바로 다음과 같습니다.
running /usr/lib/os-probes/50mounted-tests on /dev/sdb1
"dev dm-0,...의 버퍼 I/O 오류"를 기록하고 중단이 감지되었으며 파일 시스템이 다시 마운트되었습니다. 로그에는 다음과 같이 /dev/sdb1에서 파일 시스템을 감지하는 데 실패한 많은 메시지가 계속해서 표시됩니다.
Aug 17 17:12:59 mibi202 kernel: [1903146.947192] EXT4-fs (sdb1): VFS: Can't find ext4 filesystem
squashfs: SQUASHFS error: Can't find a SQUASHFS superblock on sdb1
FAT-fs (sdb1): invalid media value (0xca)
분명히 os-prober는 암호화된 장치에서 마법을 사용할 수 없으며 어떻게든 정상적인 기능을 방해하고 있습니다.
암호화된 파일 시스템을 마운트 해제하고, dmcrypt 장치와 루프를 제거하고, 이러한 작업을 올바른 순서로 다시 시작하면 파일 시스템으로 돌아갑니다.
서버 서비스 중단을 일으키는 os-prober를 방지하는 방법에 대한 조언을 환영합니다. 감사해요.
답변1
불행히도 os-prober
이는 매우 순진하며 어떤 종류의 구성(파일 또는 명령줄)도 허용하지 않습니다. 그러나 LUKS를 이해합니다.
일반 cryptsetup 대신 LUKS를 사용하면 파티션 해석 시도가 중지됩니다. 반면에 파티션이 열려 있으면 루프 장치를 찾아 이해하려고 시도합니다.
내부 /usr/lib/os-probes/50mounted-tests
테스트는 다음과 같습니다.
types="$(fs_type "$partition")" || types=NOT-DETECTED
# ...
elif [ -z "$types" ]; then
if type cryptsetup >/dev/null 2>&1 && \
cryptsetup luksDump "$partition" >/dev/null 2>&1; then
debug "$1 is a LUKS partition; skipping"
exit 0
fi
따라서 LUKS를 사용하는 것이 더 간단한 솔루션입니다.
그러나 실제로 LUKS를 사용하고 싶지 않다면 os-prober
암호화된 파티션을 크랙하여 fs_type
검사에 포함시키면 됩니다. 확인은 내부적으로 수행되며 /usr/share/os-prober/common.sh
실제로는 매우 간단합니다.
fs_type () {
if (export PATH="/lib/udev:$PATH"; type vol_id) >/dev/null 2>&1; then
PATH="/lib/udev:$PATH" vol_id --type "$1" 2>/dev/null
elif type blkid >/dev/null 2>&1; then
blkid -o value -s TYPE "$1" 2>/dev/null
else
return 0
fi
}
다음과 같이 분류할 수 있습니다.
fs_type () {
if [ "x$1" = "x/dev/sdb1" ]; then
return 0
elif (export PATH="/lib/udev:$PATH"; type vol_id) >/dev/null 2>&1; then
PATH="/lib/udev:$PATH" vol_id --type "$1" 2>/dev/null
elif type blkid >/dev/null 2>&1; then
blkid -o value -s TYPE "$1" 2>/dev/null
else
return 0
fi
}
os-prober
실제로는 쉘 스크립트 모음일 뿐입니다.