그냥 다시 시작하세요

그냥 다시 시작하세요

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))( mount1k 단위를 사용하므로 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 파일 시스템이 문제 없이 마운트되어야 합니다.

그래도 작동하지 않으면 커널을 업그레이드해 보십시오.

관련 정보