BTRFS로 포맷된 외장 드라이브가 있는데 마운트가 거부되는 것 같습니다.
$ sudo mount -vs -t btrfs -o ro,recovery,errors=continue /dev/sdb2 /media/user/dir
mount: /dev/sdb2: can't read superblock
그러나 BTRFS가 모든 슈퍼 블록을 OK로 간주하는 경우:
$ sudo btrfs rescue super-recover -v /dev/sdb2
All Devices:
Device: id = 1, name = /dev/sdb2
Before Recovering:
[All good supers]:
device name = /dev/sdb2
superblock bytenr = 65536
device name = /dev/sdb2
superblock bytenr = 67108864
device name = /dev/sdb2
superblock bytenr = 274877906944
[All bad supers]:
All supers are valid, no need to recover
대체 슈퍼블록 중 하나를 사용하도록 지정하려고 하면 sb=$((67108864/4))
( mount
1k 단위를 사용하므로 4k 블록이 있는 시스템에서 4로 나누어야 함) 동일한 오류가 발생합니다. btrfs restore
또한 드라이브에서 데이터를 읽는 데 문제가 없는 것으로 보이며 btrfs check
잘못된 캐시 항목에 대해서만 불평합니다( clear_cache
설치 시에는 도움이 되지 않습니다). 이전에 다른 드라이브에서 이런 일이 발생했는데 그것도 btrfs check --repair
작동하지 않았습니다. [1] 이 드라이브에 데이터가 많기 때문에 모든 것을 다른 곳으로 복사하고 btrfs restore
(다른 곳에서 공간을 찾는 것도 의미함) 다시 포맷한 다음 모든 것을 다시 복사하는 것이 조금 꺼려집니다.
이 문제를 해결할 방법이 있나요? btrfs
종속성 대신 마운트를 수행하도록 직접 호출하는 방법이 있습니까 mount
? 찾을 수 없습니다 mount.btrfs
.
btrfs check --repair
[1] 나는 이 방법을 최후의 수단으로 삼는 것에 대한 많은 경고가 있기 때문에 사용하기를 조금 꺼려합니다 . 특히 이전에 효과가 없었던 후에는 더욱 그렇습니다.
답변1
Btrfs를 rootfs로 사용했는데 시스템이 정지된 후 Ubuntu 18.04에서 비슷한 문제에 직면했습니다. 다음 부팅 시 Btrfs가 마운트되지 않습니다. Ubuntu LiveUSB를 사용하여 부팅하고 btrfs rescue zero-log
문제를 해결했습니다.
세부 사항:
$ sudo mount -o ro /dev/nvme0n1p2 /2
mount: /2: can't read superblock on /dev/nvme0n1p2.
(먼저 dd를 사용하여 파티션을 외부 저장 장치에 백업했습니다.)
btrfs check --check-data-csum
모든 것이 괜찮다는 것을 보여주세요. btrfs inspect-internal dump-super
슈퍼블록은 괜찮고 btrfs rescue super-recover
수정할 부분은 없다고 합니다.
하지만 마운트를 시도한 후 다음 커널 메시지를 발견했습니다.
BTRFS info (device nvme0n1p2): start tree-log replay
BTRFS critical (device nvme0n1p2): corrupt leaf: root=18446744073709551610 block=1252150951936 slot=129 ino=7029 file_offset=164888576, file extent end range (169345024) goes beyond start offset (168624128) of the next file extent
BTRFS error (device nvme0n1p2): block=1252150951936 read time tree block corruption detected
BTRFS: error (device nvme0n1p2) in btrfs_replay_log:2281: errno=-5 IO failure (Failed to recover log tree)
BTRFS info (device nvme0n1p2): delayed_refs has NO entry
BTRFS error (device nvme0n1p2): open_ctree failed
트리 로그가 손상된 것 같습니다. 나는 btrfs rescue --help
그것을 발견했다
btrfs rescue zero-log <device>
Clear the tree log. Usable if it's corrupted and prevents mount.
btrfs rescue zero-log
문제를 해결했습니다 .
$ sudo btrfs rescue zero-log /dev/nvme0n1p2
Clearing log on /dev/nvme0n1p2, previous log_root 1252152229888, level 0
답변2
그냥 다시 시작하세요
Btrfs에 /dev/sda와 같은 블록 장치 파일 이름을 변경하는 데 문제가 있는 것 같습니다. 나는 또한 같은 문제에 직면했습니다.
Btrfs 파일 시스템을 생성하고, 일부 데이터를 쓰고, 마운트 해제하고, 내 시스템에서 디스크를 제거했습니다(2.5인치 SATA 드라이브였습니다). 일주일 후 핫스왑으로 드라이브를 다시 연결했지만 설치할 수 없었습니다. . Can't read superblock
모든 것이 btrfs rescue super-recover
괜찮다고 하더군요. 나는 그것을 해봤고 btrfs check
모든 것이 괜찮다는 것을 확인했습니다.
저는 이전 커널인 4.15를 실행하고 있습니다.- 새 버전의 Btrfs(새 커널)에서는 이 문제가 해결되었다고 생각하지만 이전 버전의 경우 재부팅하면 됩니다.
드라이브가 열거되고 Btrfs 파일 시스템이 문제 없이 마운트되어야 합니다.
그래도 작동하지 않으면 커널을 업그레이드해 보십시오.