btrfs 외부 SSD는 읽기 전용으로 강제 설정되어 마운트되며 일부 파일이 불안정합니다. 데이터를 복구하는 방법은 무엇입니까?

btrfs 외부 SSD는 읽기 전용으로 강제 설정되어 마운트되며 일부 파일이 불안정합니다. 데이터를 복구하는 방법은 무엇입니까?

btrfs 파일 시스템을 사용하여 외부 SSD를 포맷했으며 루트 사용자이든 유일한 다른 사용자이든 상관없이 읽고 쓸 수 있습니다. Pop OS는 SSD를 제거하는 방식을 좋아하지 않고 종료할 때 화면에 빨간색 오류가 표시되는 것 같습니다. 이후 SSD 드라이브(sda1)는 읽기 전용이 됩니다. Pop!_OS 버그에서 LVM이 언급된 것 같습니다. Pop 종료 오류 로그가 어디에 있는지 모르므로 해당 내용을 정확하게 알려드릴 수 있습니다. 시작 로그처럼 보이는 것을 찾았지만 로그를 끄는 것도 도움이 됩니다.

이것은 Journal.log에서 가져온 것입니다:

Feb 04 23:21:07 pop-os kernel: sd 1:0:0:0: [sda] Attached SCSI disk
Feb 04 23:21:07 pop-os kernel: system76_acpi: loading **out-of-tree** module **taints** kernel.
Feb 04 23:21:33 pop-os kernel: BTRFS info (device sda1): bdev /dev/sda1 errs: wr 1, rd 2, flush 0, **corrupt** 3, gen 0
Feb 04 23:21:38 pop-os kernel: sd 1:0:0:0: [sda] tag#0 **FAILED** Result: hostbyte=DID_OK driverbyte=DRIVER_OK cmd_age=0s
Feb 04 23:21:38 pop-os kernel: sd 1:0:0:0: [sda] tag#0 Sense Key : Hardware Error [current] 
Feb 04 23:21:38 pop-os kernel: sd 1:0:0:0: [sda] tag#0 Add. Sense: Internal target failure
Feb 04 23:21:38 pop-os kernel: sd 1:0:0:0: [sda] tag#0 CDB: Read(10) 28 00 00 e1 2b 88 00 00 80 00
Feb 04 23:21:38 pop-os kernel: **critical** target error, dev sda, sector **14756744** op 0x0:(READ) flags 0x80700 phys_seg 16 prio class 0

Feb 04 23:21:39 pop-os kernel: **critical** target error, dev sda, sector **60338288** op 0x0:(READ) flags 0x80700 phys_seg 16 prio class 0

Feb 04 23:21:41 pop-os kernel: **critical** target error, dev sda, sector **73452720** op 0x0:(READ) flags 0x80700 phys_seg 16 prio class 0

Feb 04 23:22:04 pop-os kernel: **critical** target error, dev sda, sector **154215456** op 0x0:(READ) flags 0x80700 phys_seg 64 prio class 0

Feb 04 23:22:04 pop-os kernel: **BTRFS error** (device sda1): **error reading free space cache**
Feb 04 23:22:04 pop-os kernel: BTRFS warning (device sda1): failed to load free space cache for block group 40832598016, rebuilding it now

Feb 04 23:22:05 pop-os kernel: **BTRFS warning (device sda1): chunk 13631488 missing 1 devices, max tolerance is 0 for writable mount**
Feb 04 23:22:05 pop-os kernel: **BTRFS: error (device sda1) in write_all_supers:4433: errno=-5 IO failure (errors while submitting device barriers.)**
Feb 04 23:22:05 pop-os kernel: BTRFS info (device sda1: state E): **forced readonly**
Feb 04 23:22:05 pop-os kernel: BTRFS warning (device sda1: state E): Skipping commit of aborted transaction.
Feb 04 23:22:05 pop-os kernel: BTRFS: error (device sda1: state **EA**) in cleanup_transaction:1982: **errno=-5 IO failure**

오류 메시지 조합이 도움이 될 수 있는 경우를 대비하여 여러 다른 응용 프로그램을 사용하여 드라이브에 액세스해 보았습니다. "Libparted Warning"이라고 표시된 Gparted 대화 상자 창에는 "fsyncing/opening /dev/sda1 오류: 원격 I/O 오류"라는 오류 메시지가 표시됩니다. LibreWriter는 "문서 저장 오류..드라이브 경로가 존재하지 않습니다." 및 "문서 파일 이름 저장 오류: 쓰기 오류입니다. 파일에 쓸 수 없습니다."라는 두 가지 오류를 발생시켰습니다.

Dolphin 파일 관리자에서 작동하는 방식은 다음과 같습니다. 일부 파일을 노트북의 내부 SSD에 복사할 수 있지만 일부 파일은 중단되고 복사되지 않습니다. 그러면 Dolphin 오류 메시지가 나타납니다: "(Errno :5)". 나는 또한 돌고래로부터 또 다른 오류 메시지를 보았습니다: "이 장치에 있는 하나 이상의 파일이 "dolphinqhVENO.57.slave-socket" 응용 프로그램에서 열려 있습니다.(이게 무슨 뜻인가요?) 일부 디렉토리에 들어갔는데 그 안에 있는 파일을 볼 수 없습니다. (보통 (지금은) 이 파일을 볼 수 있지만 복사할 수는 없습니다.) 그런 다음 GPT 파티션 테이블이 있을 때까지 계속 실행했고 testdisk, 더 이상 작동할 수 없는 파일 시스템인 btrfs라는 것을 발견했습니다. 그런 다음 돌핀으로 돌아가서 디렉토리의 파일을 볼 수 있습니다. 이미지 파일에서 돌고래는 작은 썸네일을 표시하고 알고 있는 전체 이미지를 볼 수 있지만 김프에서 꺼내려면 검은색 이미지이거나 이미지의 처음 5개 이미지를 보여주는 다른 이미지입니다. 그리고 그 아래의 모든 것은 해킹당했습니다. 더 흥미로운 점은 복사한 파일을 노트북에서 더 안전한 다른 외장 SSD로 옮겼다는 것입니다. 파일 중 일부는 예상대로 이동했지만 일부는 이동하지 않았으며 Dolphin은 동일한 오류 5로 돌아왔습니다. 트리 구조를 다시 정렬하고 안정화해야 한다고 가정할 때 내 데이터가 여전히 존재합니까? 그러면 디렉토리는 그 안에 어떤 파일이 있는지 "알고" 파일은 그 안에 어떤 데이터가 있는지 "알게" 될까요? SSD는 상당히 새 제품이며 위에서 굵게 표시한 섹터가 정말 불량하여 더 이상 사용할 수 없는지, 아니면 해당 지점의 일부 "정렬"만으로 오류가 발생하고 전체 구조를 수정하면 오류가 발생하는지 궁금합니다. 제자리에. 언급된 Gparted와 같은 것을 동기화/닫아야 합니까? 문제가 해당 드라이브 주변의 파일에 있지 않다면?

$ sudo btrfs check /dev/sda1
Opening filesystem to check...
Checking filesystem on /dev/sda1
UUID: (the number)
[1/7] checking root items
[2/7] checking extents
[3/7] checking free space cache
Error reading 80022618112, -1
failed to load free space cache for block group 40832598016
[4/7] checking fs roots
[5/7] checking only csums items (without verifying data)
[6/7] checking root refs
[7/7] checking quota groups skipped (not enabled on this FS)
found 109238472704 bytes used, no error found
total csum bytes: 106517876
total tree bytes: 137166848
total fs tree bytes: 3325952
total extent tree bytes: 2850816
btree space waste bytes: 23485371
file data blocks allocated: 109145407488
 referenced 109100597248
$ dmesg | tail
[ 3370.531377] sd 1:0:0:0: Attached scsi generic sg0 type 0
[ 3370.531640] sd 1:0:0:0: [sda] 976773168 512-byte logical blocks: (500 GB/466 GiB)
[ 3370.531644] sd 1:0:0:0: [sda] 4096-byte physical blocks
[ 3370.531814] sd 1:0:0:0: [sda] Write Protect is off
[ 3370.531817] sd 1:0:0:0: [sda] Mode Sense: 5f 00 00 08
[ 3370.532132] sd 1:0:0:0: [sda] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA
[ 3370.532250] sd 1:0:0:0: [sda] Preferred minimum I/O size 4096 bytes
[ 3370.532253] sd 1:0:0:0: [sda] Optimal transfer size 33553920 bytes not a multiple of preferred minimum block size (4096 bytes)
[ 3370.537416]  sda: sda1
[ 3370.537565] sd 1:0:0:0: [sda] Attached SCSI disk

관련 정보