GNU/Linux에 SDHC 카드를 설치하려고 합니다. 일반적으로 발생하는 것과는 달리 /var/log/syslog
언급이 없습니다 sdb1
.
Jul 26 16:07:53 xvii kernel: [ 159.404842] scsi 6:0:0:0: Direct-Access Singim SD Card MMC/SD 1.4F PQ: 0 ANSI: 0 CCS
Jul 26 16:07:53 xvii kernel: [ 159.405115] sd 6:0:0:0: Attached scsi generic sg2 type 0
Jul 26 16:08:01 xvii kernel: [ 168.239600] sd 6:0:0:0: [sdb] Attached SCSI removable disk
그리고 fdisk -l /dev/sdb
아무것도 출력되지 않습니다. 어떻게 해야 합니까?
편집자 (2014-07-27):SD 카드를 다시 사용할 수는 있는데 뭔가 문제가 있는 것 같습니다. 어제 USB 카드 리더기로 시도해 봤습니다. 오늘은 노트북의 SD 슬롯에 넣어서 사용해 보았는데 수천 개의 I/O 오류가 발생했습니다.
Jul 27 11:56:35 xvii kernel: [ 8091.317234] mmc0: new high speed SDHC card at address 1234
Jul 27 11:56:35 xvii kernel: [ 8091.317477] mmcblk0: mmc0:1234 SA04G 3.68 GiB
Jul 27 11:56:35 xvii kernel: [ 8091.320119] mmc0: Got data interrupt 0x00200000 even though no data operation was in progress.
Jul 27 11:56:35 xvii kernel: [ 8091.322277] mmcblk0: error -84 transferring data, sector 0, nr 8, cmd response 0x900, card status 0xb00
Jul 27 11:56:35 xvii kernel: [ 8091.322289] mmcblk0: retrying using single block read
Jul 27 11:56:35 xvii kernel: [ 8091.324862] mmcblk0: error -84 transferring data, sector 0, nr 8, cmd response 0x900, card status 0x0
Jul 27 11:56:35 xvii kernel: [ 8091.324872] end_request: I/O error, dev mmcblk0, sector 0
Jul 27 11:56:35 xvii kernel: [ 8091.326398] mmcblk0: error -84 transferring data, sector 1, nr 7, cmd response 0x900, card status 0x0
Jul 27 11:56:35 xvii kernel: [ 8091.326405] end_request: I/O error, dev mmcblk0, sector 1
Jul 27 11:56:35 xvii kernel: [ 8091.329056] mmcblk0: error -84 transferring data, sector 2, nr 6, cmd response 0x900, card status 0x0
[...]
gdisk -l
파티션 테이블을 찾지 못하고 카드 lsblk
에 대한 정보를 출력합니다.
mmcblk0 179:0 0 3.7G 0 disk
나중에 다시 시도했는데 카드가 인식되었습니다.
Jul 27 12:08:00 xvii kernel: [ 8776.617712] mmc0: new high speed SDHC card at address 1234
Jul 27 12:08:00 xvii kernel: [ 8776.618117] mmcblk0: mmc0:1234 SA04G 3.68 GiB
Jul 27 12:08:00 xvii kernel: [ 8776.620324] mmcblk0: p1
설치할 수 있습니다: /media/mmc 유형 vfat(rw,nosuid,nodev,noexec,noatime,uid=1000,gid=1000,fmask=0022,dmask=0022,codepage=437,iocharset= utf8)에 /dev/mmcblk0p1 , 짧은 이름=혼합, 오류=reinstall-ro, 사용자=vinc17)
gdisk -l /dev/mmcblk0
MBR 파티션 테이블은 하나만 있는데 두 번째 파티션 테이블이 마지막 파티션과 겹치는 것으로 나타났습니다.
답변1
링크는 /dev/$disk
전체 블록 장치를 가리키지만 할당되지 않은 공간이 없는 분할된 디스크에서는 표시되지 않는 유일한 부분은 파티션 테이블의 /dev/$disk[num]
첫 번째 2kb-4mb 정도입니다 . $disk
이는 펌웨어 및/또는 운영 체제가 읽을 수 있는 형식으로 원시 장치에 기록된 일부 정보일 뿐입니다. 다양한 시스템은 이를 다양한 방식과 이유로 해석합니다. 세 가지를 소개하겠습니다.
BIOS 시스템에서 이 표는 다음과 같이 작성되었습니다.
MBR
마스터 부트 레코드펌웨어가 부팅 가능한 실행 파일을 찾을 수 있는 위치를 알아낼 수 있도록 형식을 지정합니다. BIOS를 부팅하기 위해 파티션 테이블의 처음 512바이트를 읽기 때문에 파티션 테이블을 읽습니다.부팅 가능표시하고 실행해 보세요. 이 512바이트에는 일반적으로 부트로더가 포함됩니다.( 많은 Linux 시스템과 유사grub
하거나 )lilo
그런 다음 다른 실행 파일을 체인 로드합니다.(리눅스 커널 등)로더가 이해하는 파일 시스템으로 포맷된 파티션에 위치합니다.최신 커널을 사용하는 EFI 시스템 및/또는 BIOS 시스템에서 이 파티션 테이블은 다음과 같습니다.
GPT
GUID 파티션 테이블체재. EFI 펌웨어 이해지방파일 시스템이므로 표에 설명된 파티션을 찾습니다.EFI 시스템 파티션플래그를 FAT로 마운트하고 그 안에 저장된 경로를 실행해 보세요.Boot0000-{GUID}NVRAM 변수. 이는 기본적으로 BIOS 부트로더가 수행하도록 설계된 작업과 동일하며 펌웨어가 로드하려는 실행 파일을 해석할 수 있는 한(예: 버전 3.3 이후 대부분의 Linux 커널)사용하지 마십시오. EFI 펌웨어는 조금 더 복잡합니다.
부팅 후 파티션 테이블이 존재하고 커널이 이를 이해하면 오프셋 /dev/${disk}1
에 매핑되어 4mb+
파티션 테이블이 말하는 위치에서 종료됩니다. 파티션은 실제로 다음과 같은 임의의 논리적 구분 기호입니다.
start of disk | partition table | partition 1 | ... and so on | end of disk
나는 또한 다음과 같을 수도 있다고 생각합니다.
s.o.d. | p.t. | --- unallocated raw space --- | partition 1 | ... | e.o.d.
이는 모두 파티션 테이블에서 정의한 레이아웃에 따라 다릅니다. fdisk
형식 MBR
또는 형식 gdisk
과 GPT
같은 도구를 사용하여 이 작업을 수행 할 수 있습니다.
- 펌웨어에는 부팅 장치에 대한 파티션 테이블이 필요하지만 커널에는 파일 시스템을 인식하려는 세분화된 블록 장치에 대한 파티션 테이블이 필요합니다. 디스크가 분할되어 있고 테이블이 없으면 커널은 디스크를 찾을 수 없습니다.슈퍼 블록디스크 검사에서. 파티션 테이블을 읽고 이러한 오프셋을
/dev/$disk[num]
각 파티션의 시작 부분에서 찾습니다.슈퍼 블록. 이것은 단지 몇 kb의 데이터에 불과합니다.(만약에)이는 커널에 파일 시스템의 유형을 알려줍니다. 강력한 파일 시스템은 백업을 분산시킵니다.슈퍼 블록전체 파티션. 파티션에 읽을 수 있는 파티션이 없는 경우슈퍼 블록커널은 커널이 거기에 있는 파일 시스템을 인식하지 못한다는 것을 이해합니다.
어쨌든 요점은 펌웨어에서 해석할 필요가 없는 디스크(예: 부팅하지 않는 디스크)에는 실제로 이러한 테이블이 필요하지 않다는 것입니다.(이것은 또한 유일하게 실행 가능한 GPT+BIOS 상황이기도 합니다)- 파일 시스템은 하나만 필요합니다. /dev/$disk
원하는 파일 시스템을 사용하여 전체 포맷을 수행할 수 있습니다. 원한다면 하루 종일 갈 수 있습니다 mkfs.fat /dev/$disk
. Windows는 일반적으로 플래그가 지정된 장치 유형에서 작동하기 때문에 어쨌든 그렇게 할 것입니다.이동할 수 있는배너.
즉, 파일 시스템을 완전히 변환하는 것이 가능합니다.슈퍼 블록파티션 테이블의 헤드가 아닌 디스크의 헤드에 위치합니다. 이 경우 커널이 파일 시스템을 이해하는 한 다음을 수행할 수 있습니다.
mount /dev/$disk /path/to/mount/point
그러나 파티션을 원하지만 파티션이 아직 존재하지 않는 경우 위에서 설명한 것과 유사하거나 fdisk
위에서 gdisk
설명한 도구를 사용하여 파티션을 생성해야 합니다. 즉, 해당 위치를 디스크 헤더에 매핑하는 테이블을 작성해야 합니다.
이 모든 것이 결합되어 귀하의 문제는 다음 세 가지 중 하나라고 생각합니다.
디스크에 파티션 테이블과 파일 시스템이 없습니다.
- 최근에 지워졌거나, 전혀 사용되지 않았거나, 손상되었습니다.
운영 체제 커널이 디스크 파티션 테이블을 인식하지 못합니다.
- BIOS와 EFI가 유일한 펌웨어 유형은 아닙니다. 이는 SDHC 카드가 특히 유용할 수 있는 모바일/임베디드 세계에서 특히 그렇습니다. 그러나 이러한 장치 중 다수는 파일 시스템과 파티션 테이블 사이의 경계를 모호하게 만드는 덜 정교한 파일 시스템 계층을 사용합니다.
디스크에 파티션 테이블이 없으며 운영 체제 커널에서 인식되지 않는 파일 시스템으로 포맷되었습니다.
위의 댓글을 다시 읽어보니 후자인 것이 확실해졌습니다. 해당 TV에 대한 설명서를 구해서 데스크톱 Linux에서 커널 모듈로 사용하는 파일 시스템을 로드하고 거기에 디스크를 마운트할 수 있는지 알아보는 것이 좋습니다.