호스트 및 KVM 게스트에 마운트된 파티션의 파일을 수정하여 발생한 손상을 이해합니다.

호스트 및 KVM 게스트에 마운트된 파티션의 파일을 수정하여 발생한 손상을 이해합니다.

두 개의 SSD를 추가한 서버가 있습니다. 호스트에서는 mdadm을 사용하여 두 개의 RAID 1을 만들었습니다.

RAID를 생성하는 방법은 먼저 SSD에 파티션을 생성한 후, 그 파티션을 이용해 RAID를 생성한 후, ext4로 포맷하고 태그를 붙이는 것입니다.

parted -a optimal /dev/nvme1n1 mkpart primary ext4 0% 100%
parted -a optimal /dev/nvme2n1 mkpart primary ext4 0% 100%

parted -a optimal /dev/nvme1n1 set 1 raid on
parted -a optimal /dev/nvme2n1 set 1 raid on

mdadm --create /dev/md2 --level=1 --raid-devices=2 /dev/nvme[12]n1p1

mkfs.ext4 /dev/md2

e2label /dev/md2 nvme-250gb

다음 명령을 사용하여 이 장치를 호스트에 마운트/마운트 해제했으며 이에 대한 fstab 항목을 생성할 의도가 없었습니다.

sudo mount /dev/disk/by-label/nvme-250gb /media/nvme-250gb-raid

sudo umount /media/nvme-250gb-raid

마운트된 파티션은 정상적으로 사용할 수 있습니다.

이 파티션의 목적은 KVM 내부에 데이터를 저장하는 것입니다. 운영 체제는 KVM에서 실행되지 않습니다.

하지만 호스트가 꺼져 있는 동안에도 백업 생성이나 대용량 파일 복사 등 VM 관리를 호스트에서 수행하고 싶습니다. 가상 머신이 실행되는 동안 호스트 머신에 설치할 생각이 없습니다.

VM의 경우 이 파티션을 추가 저장 장치로 추가했습니다. Virtual Machine Manager에서 "하드웨어 추가" 옵션을 사용했습니다. 이 하드웨어의 XML 파일은 다음과 같습니다.

<disk type="block" device="disk">
  <driver name="qemu" type="raw" cache="none" io="native"/>
  <source dev="/dev/disk/by-label/nvme-250gb" index="2"/>
  <backingStore/>
  <target dev="vdb" bus="virtio"/>
  <alias name="virtio-disk1"/>
  <address type="pci" domain="0x0000" bus="0x07" slot="0x00" function="0x0"/>
</disk>

VM 내에서 호스트 시스템에 마운트하는 것과 동일한 방식으로 장치를 마운트/마운트 해제합니다.

sudo mount /dev/disk/by-label/nvme-250gb /media/nvme-250gb-raid

sudo umount /media/nvme-250gb-raid

KVM 부분을 완료하기 위해 이 답변에 제공된 정보를 사용했습니다.KVM 가상 머신에 물리적 디스크 추가.

대답은 지적한다

조심하세요아니요게스트에서 사용되는 물리적 드라이브에 볼륨을 마운트하지 않으면 파일 시스템이 심각하게 손상됩니다!

이것을 테스트해보고 이 손상이 어떻게 생겼는지 확인하고 싶어서 호스트 머신과 가상 머신에 설치하고 사용하기 시작했습니다 touch.

일반적으로 이 방법은 작동하지만 동기화되지 않은 것으로 나타났습니다. sync게스트에 대한 변경 사항은 게시된 경우에도 호스트에 표시되지 않으며 그 반대의 경우도 마찬가지입니다. 때로는 작동하는 것 같지만 혼란스러울 수도 있습니다.

어떤 경우든 게스트 및/또는 호스트에서 쓸 때 마운트를 해제하고(호스트에 있는 경우) 발행하십시오.

sudo fsck.ext4 -f /dev/disk/by-label/nvme-250gb

호스트 시스템에서는 다음을 생성합니다.

$ sudo fsck.ext4 -f /dev/disk/by-label/nvme-250gb
2fsck 1.45.5 (07-Jan-2020)
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
Free blocks count wrong (59780755, counted=59780756).
Fix<y>? yes
Free inodes count wrong (15253502, counted=15261679).
Fix<y>? yes

nvme-250gb: ***** FILE SYSTEM WAS MODIFIED *****
nvme-250gb: 17/15261696 files (0.0% non-contiguous), 1235564/61016320 blocks

이를 수정하고 가상 머신에서 장치를 마운트 해제한 후 fsck그곳에서 작업을 실행하면 호스트가 이미 문제를 수정했기 때문에 오류가 표시되지 않습니다. 수정 사항을 건너뛰면 호스트와 VM 모두의 동일한 위치에서 볼 수 있습니다.

내가 알고 싶은 것은 여기서 어떤 피해가 발생했을지 모른다는 것이다. 가상 머신이 호스트가 작성한 데이터를 덮어쓰거나 그 반대의 경우도 마찬가지입니까, 아니면 fsck일부 inode 내용을 수정하여 해결할 수 있는 문제입니까(이에 대해 잘 모르겠습니다). 그런 다음 파일만 손실됩니다.

앞서 말했듯이 호스트와 가상 머신 모두에 설치할 생각은 없습니다.

하지만 호스트나 가상 머신에 설치하고 파일을 복사/생성해도 예상하지 못한 일로 인해 실수로 손상되지 않을 것이라는 100% 확신을 갖고 작동할 수 있다는 점을 알아야 합니다.

RAID이기 때문에 SSD 하나가 손상되더라도 다른 블록은 계속 데이터를 보유할 것이며 오류가 발생한 SSD를 교체하고 어레이를 다시 동기화할 수 있다고 가정합니다. 물론 VM이 종료되는 동안 이 작업을 수행합니다.

그러나 이는 또 다른 (관련되지 않은) 질문을 제기합니다. RAID 1의 맥락에서 SSD가 가상 머신에만 설치된 경우 호스트는 SSD에 문제가 있음을 알 수 있습니까? 이것이 문제라면 가상 머신에 파일 시스템으로 마운트하는 것이 더 합리적이지 않을까요? 이것이 성능에 어떤 영향을 미치나요?

답변1

물리 볼륨을 마운트하는 모든 시스템은 해당 볼륨과 관련된 모든 메타데이터를 알고 제어한다고 가정합니다. 두 시스템이 서로 독립적으로 메타데이터를 변경하는 경우 메모리 내 데이터 구조가 동기화되지 않습니다. 파일 시스템이 손상되었을 수 있습니다. 한 번에 하나의 시스템에 볼륨을 마운트하는 것이 안전합니다.

RAID 1은 두 디스크가 모두 동기화 상태로 유지됨을 의미합니다. 파일 시스템이 손상되면 두 디스크 모두의 이미지가 손상됩니다. RAID 1/5/6은 하드웨어 오류가 발생할 경우 중복성을 제공하지만 다른 문제를 예방하지는 않습니다. 특히 RAID는 백업이 아닙니다.

답변2

Doneal24가 맞습니다. 동시에 여러 호스트(또는 가상 머신)에 동일한(공유 불가능) 파일 시스템을 마운트할 수 없습니다. 두 시스템 모두에 읽기/쓰기를 탑재하면 FS 손상이 발생합니다. 그 중 하나를 읽기 전용으로 설치하고 나머지는 모두 읽기 전용으로 설치하면 읽기 전용 시스템이 변경 사항을 정확하게 추적할 수 없습니다. 이러한 "기본" 파일 시스템은 여러 운영 체제를 동시에 설치하도록 설계되지 않았습니다.

내가 알고 싶은 것은 여기서 어떤 피해가 발생했을지 모른다는 것이다.

거의 모든 것 - 나쁘다. 유능한 강사가 블록이나 섹션으로 나누어진 칠판 앞에 앉아 가면서 쓰고 지우고 있다고 상상해 보십시오. 한 강사가 칠판을 독점적으로 통제하면 모든 것이 일관성을 갖습니다.

이제 두 명의 유능한 강사가 모두 동일한 칠판을 사용하지만 서로 통신하지 않고 상대방이 블록을 쓰거나 지우거나 재사용한 시기를 안정적으로 감지한다고 상상해 보십시오. 혼란이 있었고 이사회는 이해할 수 없게 되었습니다. 강사 A는 고려할 블록을 보여주고 있으며 B는 방금 블록을 제거하거나 덮어썼습니다. 이는 횡설수설입니다.

설상가상으로 모든 최신 파일 시스템은 순서가 지정된 블록 목록을 기반으로 합니다. A 강사가 12번, 17번, 11번 블록의 화학 강의 노트를 순서대로 (칠판의 한 블록에) 적는다고 상상해 보세요. 반면 B강사는 자신의 역사강의를 16, 22, 11블록부터 읽어야 한다고 적었다. 우리는 블록 11이 학생(독자)의 절반을 혼란스럽게 할 것이라고 확신합니다.

이 문제는 각 운영체제(강사)를 동기화하면 해결이 가능하지만, 비용이 많이 들고 접근이 느리다.

관련 정보