내 SD 카드에 파티션이 있지만 Linux가 해당 파티션에 대한 장치 항목을 생성하지 않습니다.

내 SD 카드에 파티션이 있지만 Linux가 해당 파티션에 대한 장치 항목을 생성하지 않습니다.

글쎄, 여기서 무슨 일이 일어나고 있는지 전혀 모르겠습니다. 처음에는 vfat 파티션이 완전히 삭제되지 않았다는 것을 나타내는 일부 플래그가 설정되어 있어서 마운트할 수 없었던 문제라고 생각했습니다. 이 문제를 해결할 수 있는 방법이 있었던 것으로 기억하는데 지금은 찾을 수 없습니다. 어쨌든, 나는 이것이 여기서 문제가 아니라고 생각합니다. 나는 운이 없어서 며칠 동안 검색해 왔습니다.

이것은 내 카메라 중 하나에 사용하는 SDHC 카드(32GB)입니다(동일한 USB 어댑터를 사용하는 다른 카메라용 32GB 카드가 하나 더 있고 Linux에서는 잘 작동합니다). 문제 없이 카메라에서 가져올 수 있습니다. Linux에서 어댑터+카드를 연결하면 Konqueror에 장치가 나타나지 않습니다. 그래서 나는 이것을 시도했습니다 :

# mount /dev/sdd /d/try/2
mount: you must specify the filesystem type
# mount -t vfat /dev/sdd /media/sdcard
mount: wrong fs type, bad option, bad superblock on /dev/sdd,
       missing codepage or helper program, or other error
       In some cases useful info is found in syslog - try
       dmesg | tail  or so

fdisk설명하다

fdisk -l /dev/sdd

Disk /dev/sdd: 31.9 GB, 31914983424 bytes
255 heads, 63 sectors/track, 3880 cylinders, total 62333952 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: 0x00000000

   Device Boot      Start         End      Blocks   Id  System
/dev/sdd1            8192    62333951    31162880    c  W95 FAT32 (LBA)

하지만

# ls /dev/sdd*
/dev/sdd

따라서 /dev/sddX 장치가 fdisk존재한다고 하더라도 목록에 표시되지 않습니다! gparted/dev/sdd1 파티션은 문제 없이 표시됩니다(그러나 이전에는 4MB의 여유 공간이 있었습니다). 그래서 나는 여기서 뭔가 다른 일이 일어나고 있다고 의심합니다. 이 여유 공간이 문제의 원인일 가능성이 있습니까? 왜 이런 일이 발생합니까? 4MB를 모두 사용하도록 파티션 크기를 조정하면(도대체 어떻게 이런 일이 발생했습니까?) 이러한 모든 문제를 해결할 수 있습니까? 이로 인해 이제 카메라에서 데이터를 읽을 수 없게 됩니까? 아니면 더 나쁜 것은 복구할 수 없을 정도로 손상된 것입니까? 나는 이전에 Linux 내에서 이 카드에 액세스할 수 있었다고 확신합니다. 왜냐하면 일부 파일을 이동한 것 같기 때문입니다(다른 카메라의 일부 사진이 포함되어 있음). 그래서 이상하게 지금은 접속이 안되네요.

기본적으로 이 문제를 해결하는 방법(가능한 한 비파괴적으로)과 문제의 원인이 무엇인지(향후에 이를 방지하기 위해) 알고 싶습니다. 참고로 dmesg출력물을 포함시켰습니다 .

# dmesg|tail -30
[3783978.490032] usb 1-5: new high-speed USB device number 44 using ehci_hcd
[3783978.608523] usb 1-5: New USB device found, idVendor=05e3, idProduct=0727
[3783978.608528] usb 1-5: New USB device strings: Mfr=3, Product=4, SerialNumber=2
[3783978.608530] usb 1-5: Product: USB Storage
[3783978.608531] usb 1-5: Manufacturer: Generic
[3783978.608533] usb 1-5: SerialNumber: 000000000207
[3783978.609406] scsi29 : usb-storage 1-5:1.0
[3783979.610445] scsi 29:0:0:0: Direct-Access     Generic  STORAGE DEVICE   0207 PQ: 0 ANSI: 0
[3783979.613096] sd 29:0:0:0: Attached scsi generic sg3 type 0
[3783979.773160] sd 29:0:0:0: [sdd] 62333952 512-byte logical blocks: (31.9 GB/29.7 GiB)
[3783979.774295] sd 29:0:0:0: [sdd] Write Protect is off
[3783979.774300] sd 29:0:0:0: [sdd] Mode Sense: 0b 00 00 08
[3783979.775406] sd 29:0:0:0: [sdd] No Caching mode page present
[3783979.775410] sd 29:0:0:0: [sdd] Assuming drive cache: write through
[3783979.779038] sd 29:0:0:0: [sdd] No Caching mode page present
[3783979.779048] sd 29:0:0:0: [sdd] Assuming drive cache: write through
[3783981.471143] sd 29:0:0:0: [sdd] Unhandled sense code
[3783981.471147] sd 29:0:0:0: [sdd]  Result: hostbyte=DID_OK driverbyte=DRIVER_SENSE
[3783981.471150] sd 29:0:0:0: [sdd]  Sense Key : Medium Error [current] 
[3783981.471153] sd 29:0:0:0: [sdd]  Add. Sense: Data phase CRC error detected
[3783981.471157] sd 29:0:0:0: [sdd] CDB: Read(10): 28 00 00 00 00 00 00 00 08 00
[3783981.471162] end_request: I/O error, dev sdd, sector 0
[3783981.471166] Buffer I/O error on device sdd, logical block 0
[3783981.482542] Dev sdd: unable to read RDB block 0
[3783981.482548]  sdd: unable to read partition table
[3783981.486264] sd 29:0:0:0: [sdd] No Caching mode page present
[3783981.486267] sd 29:0:0:0: [sdd] Assuming drive cache: write through
[3783981.486269] sd 29:0:0:0: [sdd] Attached SCSI removable disk

답변1

약간의 진전이 있습니다(적절한 최종 솔루션을 찾으면 이 답변을 편집하겠습니다). @INDIVIDUAL-IT의 명령을 사용하여 장치의 전체 백업을 수행한 후 dd(bs=1M을 사용하면 전송 속도가 매우 느려질 것 같습니다). 백업파일을 설치할 수 없지만

# dd if=backup.img of=backup-skip.img bs=1M skip=4

설치 가능한 파일을 생성합니다(백업 건너뛰기.img), 내가 아는 한 모든 파일이 거기에 있고 액세스할 수 있습니다. (업데이트: 이 제거된 이미지를 SD 카드에 다시 쓰면 Linux가 자동으로 이를 감지하고 마운트하지만 카메라에서는 작동하지 않습니다.)

다시 로드 gparted하고 파티션 앞의 4MB의 빈 공간을 삭제하려고 시도했지만 불가능했고 파티션이 모든 공간을 사용하도록 허용하지 않았으며 최소 1MB는 ​​삭제할 수 없었습니다(모든 옵션을 시도했습니다)조정, 그러나 주사위는 없습니다).

호기심에 lbasdd1 파티션을 선택 취소했습니다. 이 변경 사항을 확인하라는 메시지가 표시되지 않았고 장치에 변경 사항을 적용하기 위해 아무 곳이나 클릭하지도 않았지만 어댑터의 LED가 깜박이는 것을 보고 갑자기 내 SD 카드 항목이 Konqueror에 나타났습니다. USB 장치를 마운트 해제하고 플러그를 뽑았다가 다시 연결했지만 SD 카드가 자동으로 감지되지 않아 1단계로 돌아갔습니다. 이제 장치에서 활성화되지 않았다고 gparted표시됩니다 . lba이상한.

파티션이 감지되었습니다!

이상한 간격 효과로 인해 안개가 기억에서 조금 사라져서 다음을 실행했습니다.

# partprobe

갑자기 /dev/sdd1이 생성되고 장치가 Konqueror에 나타납니다! 따라서 아직 최종 해결책은 아니지만(매번 루트로 partprobe를 실행해야 하기 때문에) 적어도 내 파일에 액세스할 수는 있습니다. 영구적인 해결책을 찾을 때 이것이 누군가에게 도움이 되기를 바랍니다.

답변2

귀하의 파티션 테이블은 나에게 약간 혼란스러운 것 같습니다.

  1. dd:를 사용하면 카드 전체를 백업할 수 있습니다 dd if=/dev/sdd of=backup.img bs=1M. dd가 SD 카드를 복사할 수 없으면 하드웨어가 손상되었을 가능성이 있습니다. 아직 행운을 시험해 볼 수 있어요구조하다
  2. 사용테스트 디스크파티션 테이블을 복원해 보십시오. backup.img 파일을 복원하고 백업 파일도 백업하세요. 상황을 악화시키지 않도록 하기 위해서입니다.
  3. 처음 사용된 4MB를 제거하세요.dd if=backup.img of=backup_striped bs=1M skip=4
  4. 복구를 통해 모든 파일이 포함된 설치 가능한 파일이 제공되고 fsck에서 테스트 시 오류가 발생하지 않으면 복구된 파일을 SD 카드에 다시 쓸 수 있습니다.dd if=backup_striped of=/dev/sdd bs=1M 올바른 드라이브에 쓰고 있는지 확인하세요.
  5. 파티션 복구가 실패하면 TestDisk를 사용하여 파일을 하나씩 복구할 수 있습니다.파라마운트 또는 메스

TestDisk를 사용하여 다음을 수행할 수 있습니다.

답변3

로그에 따르면 커널이 카드를 감지한 후 즉시 파티션 테이블을 읽으려고 하면 하드웨어에서 오류가 발생합니다. 그러나 partprobe나중에 호출하면 커널은 파티션 테이블을 잘 읽을 수 있습니다. 하드웨어 오류나 드라이버 오류로 인해 초기 읽기가 실패할 수 있는 것 같습니다. SD 카드 또는 카드 리더 펌웨어가 초기화를 완료하는 데 시간이 걸리고 드라이버가 조기에 읽으려고 시도하는 것일 수 있습니다. 하드웨어를 변경하지 않고 해결 방법은 드라이버에 지연을 도입하는 것입니다.

해결 방법으로 다음을 수행할 수 있습니다.udev 규칙 추가장치를 일치시키고 스크립트를 실행하십시오

#!/bin/sh
sleep 1
partprobe "$DEVNAME"

관련 정보