btrfs는 읽기 전용 파일 시스템에서 보낼 수 없습니다

btrfs는 읽기 전용 파일 시스템에서 보낼 수 없습니다

그래서 btrfs 루트 파일 시스템이 약간 손상되었습니다. 이제 부팅하면 루트 읽기/쓰기 마운트가 실패하고 파일 시스템이 읽기 전용으로 마운트됩니다. 내가 읽으려고 하는 모든 파일은 제대로 작동하는 것 같으므로 피해가 상당히 제한적이라고 가정합니다.

현지 스냅샷이 많이 있습니다. 손상으로 인해 모든 파일이 영향을 받지 않기를 바랍니다. 문제를 해결하기 위해 보다 과감한 조치를 취하기 전에 가능한 한 많은 파일을 외부 백업 디스크에 복사하고 싶습니다. 그러나 btrfs send그것은 실패했다 -30 (Read-only file system).

  • btrfs send만약에보내다파일 시스템이 읽기 전용으로 마운트되어 있습니까? 거기에 아무것도 쓸 필요가 없는 것 같기 때문에 이것은 나를 놀라게 할 것입니다.
  • 그렇다면 btrfs send전송 파일 시스템이 실제로 기록되고 있기 때문입니까, 아니면 이 확인을 수행하는 다른 이유가 있습니까?
  • 해결책이 있나요? 현재는 스냅샷을 다시 동기화할 계획이지만 당연히 속도가 훨씬 느려집니다.

(다른 사항을 다루는 것이 너무 어렵다면 위의 사항 중 하나만 다루는 답변에 투표하겠습니다.)

답변1

방금 내 VM에서 이것을 테스트했습니다 ztest(zfs, btrfs, mdadm, lvm 및 유사한 항목을 테스트/연습하는 데 사용합니다). VM에는 /dev/vda에서 /dev/vdo까지 15 x 100MB 가상 드라이브가 연결되어 있습니다. 내가 실행 중인 테스트 유형에 비해 규모가 클 필요는 없습니다).

어쨌든 읽기 전용 btrfs 마운트의 하위 볼륨을 다른 fs(/tank1, ZFS)의 파일로 보낼 수 있었습니다. 예를 들어

# df -Th /b1
Filesystem     Type   Size  Used Avail Use% Mounted on
/dev/vdb1      btrfs  190M  7.3M  148M   5% /b1

# btrfs filesystem show /b1
Label: none  uuid: a5217930-73a9-4481-a14a-2c1974b3f2db
    Total devices 2 FS bytes used 4.00MiB
    devid    1 size 190.00MiB used 104.00MiB path /dev/vdb1
    devid    2 size 190.00MiB used 104.00MiB path /dev/vdc1

# mount -o ro,remount /b1

# mount | grep /b1
/dev/vdb1 on /b1 type btrfs (ro,relatime,space_cache,subvolid=5,subvol=/)

# btrfs send /b1/sv1_20160506 -f /tank1/b1.send
At subvol /b1/sv1_20160506

# ls -l /tank1/b1.send 
-rw-rw-r-- 1 root root 2177404 Jun  7 01:24 /tank1/b1.send

이것이 귀하의 시스템에서 작동하지 않는 이유에 대해 두 가지 가능성을 생각할 수 있습니다(그러나 다른 경우도 있을 수 있으며 이들 중 어느 것도 반드시 정확하지는 않습니다).

  1. btrfs를 작성해야 할 수도 /tmp있고 /tmp하위 디렉토리일 수도 있습니다 /. 그럴 가능성은 낮지만 ramdisk에 tmpfs를 마운트하는 것은 가치가 있을 수 있습니다 /tmp.

  2. btrfs fs 가 손상되었기 때문에 btrfs가 /제대로 작동하지 않습니다.

두 경우 모두 가능한 해결 방법은 복구 CD/DVD/USB 등에서 부팅하는 것입니다.btrfs 지원 있음(갈라진그리고크론질라좋은 옵션입니다) btrfs send거기서 스냅샷을 찍어보세요(외부 백업 디스크를 RW로 수동으로 마운트한 후).

관련 정보