"단일" 모드에서 디스크 오류가 발생한 후 BTRFS를 복구/계속할 수 있습니까?

"단일" 모드에서 디스크 오류가 발생한 후 BTRFS를 복구/계속할 수 있습니까?

btrfs를 처음으로 테스트하여 특정 프로젝트에 사용할 수 있는지 확인하세요.

저는 가상 머신에서 일하고 있습니다.

  1. 임의 크기의 미니디스크 3개를 사용하여 볼륨을 생성했습니다.

    mkfs.btrfs -d single /dev/sdb /dev/sdc /dev/sdd
    mount /dev/sdb /mnt/data
    
  2. 테스트용으로 다른 장치 추가

    btrfs device add /dev/sde /mnt/data 
    
  3. 디스크를 채우기 위해 1GB 파일 묶음을 만듭니다.

    dd if=/dev/urandom of=1GB_07.bin bs=64M count=16 iflag=fullblock
    
  4. 가상 머신에서 디스크 중 하나를 제거하고 재부팅했습니다.

  5. 읽기 전용 모드로 강제 설치를 할 수 있었습니다

    mount -ro degraded /dev/sdb /mnt/data
    

모든 파일을 볼 수 있어요. 다른 디렉토리에 동기화를 시도했지만 내가 만든 1G 파일 중 하나를 복사할 수 없습니다. 말이 되네요. 사라진 디스크에 있어요!

여기에서 손실된 디스크와 그 안에 있는 파일을 "폐기"하고 읽기/쓰기 모드에서 다시 실행되도록 하는 방법이 있습니까? 나는 단지 임의의 크기의 디스크가 들어 있는 상자를 함께 조립하고 싶었습니다. 중복성은 나에게 중요하지 않으며 데이터 미러링에 따른 오버헤드를 원하지 않습니다.이 상자에.

일부 데이터가 포함된 드라이브를 분실한 경우 해당 드라이브를 교체/삭제하고 소스에서 다시 동기화하여 BTRFS 시스템에서 손실된 파일의 새 복사본을 가져오고 싶습니다.

말이 돼? 가능합니까?

답변1

정확한 설명에 따르면 아니요, 메타데이터 트리의 일부도 손실되기 때문에 불가능합니다(실제로 운이 좋지 않으면 블록 트리( btrfs fi df출력의 시스템 블록)도 손실됩니다. 이는 다음과 같습니다. ext4 파일 시스템에서 슈퍼블록과 inode 테이블의 일부를 삭제합니다. 메타데이터 누락은 읽기 전용으로 설치해야 하는 이유 중 하나입니다.

기본적으로 BTRFS는 dup메타데이터 스키마를 사용합니다. 즉, 각 메타데이터 블록의 사본 2개를 저장하지만 둘 다 동일한 장치에 저장됩니다(장치가 여러 개인 경우에도). 따라서 이 메타데이터 프로필을 사용하여 다중 장치 BTRFS 볼륨에서 장치를 분실하면 일부 메타데이터가 손실될 수 있습니다(잠재적으로). 메타데이터 트리가 손상된 경우 파일 시스템의 많은 부분이 손실될 수 있으며 파일 시스템을 전혀 마운트하지 못할 수도 있습니다.

당신이 해야 할 일은 raid1메타데이터 스키마를 사용하는 것입니다. 진지하게, 이는 생각만큼 성능에 영향을 미치지 않습니다. 특히 정기적으로 파일 시스템에 쓰지 않는 경우 단일 장치 오류로 인해 전체 파일 시스템이 파괴되는 것을 방지할 수 있습니다.

이렇게 하면 장치에 오류가 발생하면 다음과 같이 하세요.

  1. mount -o remount,rw,degraded파일 시스템을 다시 쓸 수 있도록 강제 하는 데 사용됩니다 .문제를 해결하지 않으면 파일 시스템이 이렇게 작동하지 않도록 하십시오! 진지하게, 파일 시스템의 성능이 저하되었지만 쓰기 가능하게 만들면 매우 나쁜 일이 발생할 수 있습니다.
  2. 어떤 방식으로든 오류의 영향을 받은 모든 파일을 삭제합니다. 현재로서는 특히 어느 정도 조각화가 있는 경우 무엇이 영향을 받는지 확실하게 파악하기가 쉽지 않습니다.
  3. 이러한 파일과 디렉터리를 삭제한 후 btrfs device delete실패한 장치 삭제를 사용하세요(장치가 완전히 누락된 경우 btrfs device delete missing삭제를 사용할 수 있습니다). 이 경우 사용하면 btrfs replace실패할 수 있으며 더 나은 성능을 얻을 수 없습니다. 또한 을 사용하면 btrfs device delete새 장치가 최소한 이전 장치만큼 커야 한다는 요구 사항이 제거됩니다. 따라서 균일한 크기의 장치를 다루지 않으므로 생활이 더 쉬워집니다.
  4. btrfs device add교체 장치를 추가한 다음 btrfs balance start -musage=100메타데이터 블록의 균형을 재조정하는 데 사용됩니다 (누락된 파일을 복사하면 데이터 블록의 균형이 자연스럽게 재조정됩니다).
  5. 또는 유사한 도구를 사용하여 rsync현재 손실된 콘텐츠를 다시 복사하십시오.

답변2

결함이 있는 장치를 작동하는 장치로 교체하려면 btrfs replace를 사용하십시오.

btrfs replace start -r /dev/failed-dev /dev/new-dev /mountpoint

감시 장치

btrfs replace status /mountpoint

관련 정보