USB 스틱이나 SD 카드의 파티션 테이블이 갑자기 커널에서 더 이상 인식되지 않는 상황이 자주 발생합니다. 반면 (g)parted 및 fdisk는 다른 시스템처럼 여전히 이를 볼 수 있습니다. 파티션 중 하나에서 fsck를 수행하도록 gparted에 지시할 수도 있지만 물론 장치 파일(예: /dev/sdbX)이 존재하지 않기 때문에 실패합니다.
dmesg 출력을 첨부하겠습니다.
[ 8771.136129] usb 1-5: new high-speed USB device number 4 using ehci_hcd
[ 8771.330322] Initializing USB Mass Storage driver...
[ 8771.330766] scsi4 : usb-storage 1-5:1.0
[ 8771.331108] usbcore: registered new interface driver usb-storage
[ 8771.331118] USB Mass Storage support registered.
[ 8772.329734] scsi 4:0:0:0: Direct-Access Generic STORAGE DEVICE 0207 PQ: 0 ANSI: 0
[ 8772.334359] sd 4:0:0:0: Attached scsi generic sg1 type 0
[ 8772.619619] sd 4:0:0:0: [sdb] 31586304 512-byte logical blocks: (16.1 GB/15.0 GiB)
[ 8772.620955] sd 4:0:0:0: [sdb] Write Protect is off
[ 8772.620971] sd 4:0:0:0: [sdb] Mode Sense: 0b 00 00 08
[ 8772.622303] sd 4:0:0:0: [sdb] No Caching mode page present
[ 8772.622317] sd 4:0:0:0: [sdb] Assuming drive cache: write through
[ 8772.629970] sd 4:0:0:0: [sdb] No Caching mode page present
[ 8772.629992] sd 4:0:0:0: [sdb] Assuming drive cache: write through
[ 8775.030231] sd 4:0:0:0: [sdb] Unhandled sense code
[ 8775.030240] sd 4:0:0:0: [sdb] Result: hostbyte=DID_OK driverbyte=DRIVER_SENSE
[ 8775.030249] sd 4:0:0:0: [sdb] Sense Key : Medium Error [current]
[ 8775.030259] sd 4:0:0:0: [sdb] Add. Sense: Data phase CRC error detected
[ 8775.030271] sd 4:0:0:0: [sdb] CDB: Read(10): 28 00 00 00 00 00 00 00 08 00
[ 8775.030291] end_request: I/O error, dev sdb, sector 0
[ 8775.030300] quiet_error: 30 callbacks suppressed
[ 8775.030306] Buffer I/O error on device sdb, logical block 0
[ 8775.033781] ldm_validate_partition_table(): Disk read failed.
[ 8775.033813] Dev sdb: unable to read RDB block 0
[ 8775.037147] sdb: unable to read partition table
[ 8775.047170] sd 4:0:0:0: [sdb] No Caching mode page present
[ 8775.047185] sd 4:0:0:0: [sdb] Assuming drive cache: write through
[ 8775.047196] sd 4:0:0:0: [sdb] Attached SCSI removable disk
반면에 parted는 동시에 동일한 디스크에 다음과 같이 말해야 합니다.
(parted) print
Model: Generic STORAGE DEVICE (scsi)
Disk /dev/sdb: 16.2GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Number Start End Size Type File system Flags
1 4194kB 62.9MB 58.7MB primary fat16 lba
2 62.9MB 16.2GB 16.1GB primary ext4
분할되어 있을 뿐만 아니라, 오래된 fdisk도 분할된 테이블에 문제가 없습니다.
Command (m for help): p
Disk /dev/sdb: 16.2 GB, 16172187648 bytes
64 heads, 32 sectors/track, 15423 cylinders, total 31586304 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
Disk identifier: 0x000dbfc6
Device Boot Start End Blocks Id System
/dev/sdb1 8192 122879 57344 c W95 FAT32 (LBA)
/dev/sdb2 122880 31586303 15731712 83 Linux
나는 정말로 아무것도 모른다. 파티션 테이블이 손상되었다고 말하기는 쉽지만, gparted가 여전히 불만 없이(그리고 불만 없이) 읽을 수 있는 이유는 무엇입니까? 또는 (g)parted가 기적적으로 발견한 파티션 테이블을 어떻게 다시 빌드할 수 있습니까?
답변1
어떤 이유로 커널이 파티션 테이블을 읽을 수 없습니다.
[ 8775.030291] end_request: I/O error, dev sdb, sector 0
[ 8775.030300] quiet_error: 30 callbacks suppressed
[ 8775.030306] Buffer I/O error on device sdb, logical block 0
[ 8775.033781] ldm_validate_partition_table(): Disk read failed.
따라서 파티션 테이블을 읽지 않기 때문에 파티션에 대한 장치를 생성할 수 없습니다. 나중에 parted 또는 fdisk를 사용하여 파티션 테이블을 보려고 하면 IO가 성공합니다.
partprobe /dev/sdX
커널이 부팅 시 파티션을 인식하지 못할 때 이 방법을 시도해 보세요.
남성 부분 프로브:
PARTPROBE(8) GNU Parted Manual PARTPROBE(8)
NAME
partprobe - inform the OS of partition table changes
SYNOPSIS
partprobe [-d] [-s] [devices...]
DESCRIPTION
This manual page documents briefly the partprobe command.
partprobe is a program that informs the operating system kernel of partition table changes, by requesting that the operating system re-read the
partition table.
답변2
이것은 귀하의 경우일 수 있습니다. 다른 사람이 이 문제에 직면할 경우를 대비해, 저는 이전에 이 문제에 직면했고 발견했습니다.다른 파티션 편집기 가 있거나 gparted
다른 파티션 편집기가 파티션 테이블 읽기를 차단할 수 있음. 닫고 gparted
다시 시도해 보세요. 그렇게 간단할 수도 있습니다.