라즈베리파이용 SD카드가 있습니다. 이 SD 카드를 Linux PC에 마운트하여 파일을 가져오고 싶지만 그럴 수 없습니다.
SD 카드를 카드 리더기에 넣으면 dmesg에 다음 메시지가 표시됩니다.
[ 114.117896] usb 4-1: new full-speed USB device number 2 using ohci-pci
[ 114.292885] usb 4-1: New USB device found, idVendor=214b, idProduct=1101
[ 114.292897] usb 4-1: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[ 114.292904] usb 4-1: Product: USB2.0 Device
[ 114.292910] usb 4-1: Manufacturer: Generic
[ 114.292914] usb 4-1: SerialNumber: 0201202010201000
[ 114.383603] usb-storage 4-1:1.0: USB Mass Storage device detected
[ 114.383803] scsi6 : usb-storage 4-1:1.0
[ 114.383956] usbcore: registered new interface driver usb-storage
[ 115.386965] scsi 6:0:0:0: Direct-Access USB2.0 CARD-READER 1.01 PQ: 0 ANSI: 2
[ 115.388961] sd 6:0:0:0: Attached scsi generic sg2 type 0
[ 115.409892] sd 6:0:0:0: [sdc] Attached SCSI removable disk
[ 115.471798] sd 6:0:0:0: [sdc] 30679040 512-byte logical blocks: (15.7 GB/14.6 GiB)
[ 115.505782] sdc: detected capacity change from 0 to 15707668480
[ 115.534776] sdc: sdc1 sdc2 < sdc5 sdc6 > sdc3
카드의 파티션 테이블은 다음과 같습니다.
# parted /dev/sdc
GNU Parted 3.2
Using /dev/sdc
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) print
Model: USB2.0 CARD-READER (scsi)
Disk /dev/sdc: 15,7GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags:
Number Start End Size Type File system Flags
1 1049kB 1275MB 1274MB primary fat32 lba
2 1278MB 15,7GB 14,4GB extended
5 1279MB 1342MB 62,9MB logical fat16 lba
6 1343MB 15,7GB 14,3GB logical
3 15,7GB 15,7GB 33,6MB primary
fdisk를 사용하여 장치를 확인하면 다음과 같이 표시됩니다.
# fdisk /dev/sdc -l
Disk /dev/sdc: 14.6 GiB, 15707668480 bytes, 30679040 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x000daf86
Device Boot Start End Sectors Size Id Type
/dev/sdc1 2048 2490234 2488187 1.2G e W95 FAT16 (LBA)
/dev/sdc2 2496512 30609407 28112896 13.4G 85 Linux extended
/dev/sdc3 30613504 30679039 65536 32M 83 Linux
/dev/sdc5 2498560 2621439 122880 60M c W95 FAT32 (LBA)
/dev/sdc6 2623488 30607359 27983872 13.4G 83 Linux
Partition table entries are not in disk order.
/dev/sdc6이 가장 큰 파티션인 것 같아서 마운트하고 싶습니다. 설치하려고 하면 다음과 같은 결과가 나타납니다.
# mount -v /dev/sdc6 test
mount: wrong fs type, bad option, bad superblock on /dev/sdc6,
missing codepage or helper program, or other error
In some cases useful info is found in syslog - try
dmesg | tail or so.
/dev/sdc6을 마운트하려고 하면 Dmesg가 아무 말도 하지 않습니다.
이 파티션을 확인하면문서명령은 다음과 같습니다.
# file -s /dev/sdc6
/dev/sdc6: data
fsck를 사용하여 파일 시스템을 검사하면 다음과 같은 결과가 나타납니다.
# LC_ALL=C fsck.ext3 -n /dev/sdc6
e2fsck 1.43.4 (31-Jan-2017)
ext2fs_open2: Bad magic number in super-block
fsck.ext3: Superblock invalid, trying backup blocks...
root was not cleanly unmounted, check forced.
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
Free blocks count wrong for group #0 (4245, counted=11608).
Fix? no
Free blocks count wrong for group #1 (1373, counted=707).
Fix? no
Free blocks count wrong for group #2 (1699, counted=1880).
Fix? no
(...)
Inode bitmap differences: -(57345--131072) -172034 -172037 -(172042--172043) -172045 -172047 -172049 -172053 -172057 -172059 -172062 -172065 (...)
Fix? no
root: ********** WARNING: Filesystem still has errors **********
root: 91692/876544 files (0.8% non-contiguous), 1413337/3497984 blocks
내가 이해한 바에 따르면 Linux는 알 수 없는 이유로 이 파일 시스템을 마운트할 수 없습니다. 이유를 알고 싶습니다. 파일 시스템이 손상되었나요, 아니면 다른 이유가 있나요? 이 파일 시스템을 마운트하거나 어떻게든 해당 파일을 복원하고 싶습니다.
이 문제를 해결하려면 지금 무엇을 해야 합니까?
편집: 도움을 주신 모든 분들께 감사드립니다! 마침내 fsck를 사용하여 파티션에 Linux 확장 파일 시스템이 포함되어 있지만 해당 파일 시스템이 손상되어 마운트할 수 없다는 사실을 발견했습니다. 카드를 백업한 다음("cat /dev/sdc | gzip > mybackup" 사용) 장치에 불량 블록이 포함되어 있는지 확인했습니다. 불량 블록이 포함되어 있지 않았기 때문에 (SD 카드의 파일 시스템이 손상된 SD 카드 리더를 사용하여 손상되었을 수 있습니까?) fsck로 파일 시스템을 복구하고 카드를 Raspberry Pi에 넣은 후 부팅하지 않고 부팅했습니다. 문제 .
답변1
공개된 출력에 따르면 fsck
일부 데이터가 복구될 것으로 예상됩니다.
나는 다음을 추천합니다:
- 파일 시스템을
dd
디스크 파일에 복사합니다(예fdsump.orig
: ). 실패하면 시도해 보십시오ddrescue
. 시작하기 전에 여유 공간이 충분한지 확인하세요. - 이 파일을 직접 작업하지 말고
cp fsdump.orig fsdump
언제든지 이 단계로 돌아가서 다시 시작할 수 있도록 새 복사본(예: )을 만드십시오. - 데이터 파일에서
mount -o loop
장치 생성fsdump
(예/dev/loop1
: ) - 오류가 발생하지 않을 때까지 시도해 보세요
fsck.ext3 /dev/loop1
. 횟수가 많을수록 더 많은 피해를 입게 됩니다. /dev/loop1
디렉토리에 마운트하십시오 . 모든 파일을 안전한 위치에 복사하세요. (cp -a
또는rsync
파일 속성을 보존하려면 사용하세요). 이들 중 하나라도 손상되거나 잘릴 수 있습니다.- 이제 순환 파일 시스템을 마운트 해제할 수 있습니다.
자세한 내용은 위 유틸리티의 매뉴얼 페이지를 참조하십시오.
답변2
당신은 사용할 수 있습니다파일 1)file -s /dev/sdc6
이는 블록 장치에서 일부 바이트를 읽고 거기에 무엇이 있는지 추측하기 때문입니다 .
아무것도 인식되지 않으면 문제가 발생하고 데이터를 복구하기 위한 조치를 취해야 하므로 데이터가 손실될 수 있습니다.선험적으로어떤 파일 시스템이 있습니까?
일부 파일 시스템이 인식되면 다음을 사용해 볼 수 있습니다.설치(8)명확하게-t
type
파티션 테이블 항목이 디스크 순서가 아닙니다.
냄새가 별로 좋지 않아요. 전체 디스크를 다시 파티션해야 할 수도 있습니다(하지만 그 전에 데이터를 백업해야 함). 두 개의 겹치는 파티션이 있는 것 같습니다 ( sdc2
및sdc6
다른 Linux PC에서 실행 중이므로 다음을 사용하여 SD 카드의 데이터를 PC(일부 파일)로 복사할 수 있습니다.일(1)
dd if=/dev/sdc6 of=$HOME/diskdata bs=4k
그런데, 이 명령 후에 dmesg
복사가 원활하게 진행되는지 확인하시기 바랍니다.
dd
전체 SD 카드를 복사할 수도 있습니다 .
$HOME/diskdata
그러면 Linux PC에서 해당 파일의 뒤죽박죽된 내용을 해독하는 데 몇 시간(또는 몇 달)이 걸릴 수 있습니다 . 당신이 사용할 수있는디버깅(8)이를 위해 원본 파일 시스템을 ext3 또는 ext4로 간주하면
SD 카드는 빨리 마모되는 깨지기 쉬운 장치입니다. 몸이 망가진 것 같아요. 확실한 데이터 손실에 대비하세요.