(g)parted
다음은 or 명령을 사용하여 얻은 정보입니다 fdisk
.
Device Boot Start End Sectors Size Id Type
/dev/sda1 * 2048 196265983 196263936 93.6G 83 Linux
/dev/sda2 196268030 229468159 33200130 15.9G 5 Extended
/dev/sda5 196268032 229468159 33200128 15.9G 82 Linux swap / Solaris
파티션이 확장/기본이고 sda2 아래의 계층 구조가 sda5 등인지 확인하는 데 사용할 수 있는 syscall 또는 파일 시스템(/sys/block 등) 기반 정보가 있습니까? 그렇다면 선택한 확장 파티션 아래에 논리 파티션이 있는지 알 수 있는 방법이 있습니까?
명령 출력을 구문 분석하지 않고 싶습니다. fdisk의 코드를 읽어보았지만 이해하기에는 너무 복잡했습니다.
편집 1: 댓글과 답변을 읽은 후 MBR/GPT 등에 대해 모른다는 사실을 알게 되었습니다. 그래서 MBR과 EBR의 내부 구조에 대해 읽어보기로 했습니다.https://thestarman.pcministry.com/asm/mbr/PartTables2.htm#ebr디스크의 파티션 세부 정보를 가져오는 코드를 작성했습니다.
답변1
문제가 잘 정의되어 있지 않습니다.
디스크가 GPT로 포맷된 경우 확장 파티션이 없으므로 계층 구조도 없습니다.
Microsoft 운영 체제에서 액세스할 수 있도록 디스크가 MBR로 포맷된 경우 최대 1개의 확장 파티션, 총 4개의 기본 파티션과 확장 파티션이 있을 수 있습니다. 해당 이름은 /dev/sdf[0-3] 형식입니다. 논리 파티션이 있는 경우 해당 파티션 번호는 4보다 큽니다. 논리 파티션을 가지려면 이를 보유할 확장 파티션이 있어야 합니다.
그러나 Linux 시스템에는 최대 하나의 확장 파티션이 있어야 한다는 요구 사항이 없으며, 확장 파티션을 사용하지 않는 한 비확장 파티션이 겹칠 수 없다는 말도 없습니다.
따라서 특히 파티션 1을 더 작은 부팅 파티션으로 만들고, 파티션 2는 파티션 1에 없는 모든 것을 덮고, 파티션 3은 파티션 2의 전반부를 덮고 "확장" 유형이 되도록 하고, 파티션 4는 파티션으로 만들 수 있습니다. 2후반. 파티션 2. 파티션 3에는 각각 파티션 3의 절반을 차지하는 파티션 5와 6이 있을 수 있습니다. 실제로 파티션 2를 사용하지 않는 한 이 모든 것이 잘 작동합니다. 그러나 파티션 5와 6은 모두 파티션 2 3에 있으므로 "계층 구조"는 DAG(방향성 비순환 그래프)가 아니므로 "고객 요구 사항"할 수 없다풀다.
그러한 고객들에게 제가 드리는 조언은 수수료를 두 배로 늘리라는 것입니다.
기본/확장 파티션의 "유형"은 MBR에 문서화되어 있으므로 유사한 코드를 사용하여 dd bs=1 skip=446 count=64 if=/dev/sdf | hexdump -C
다음과 같은 것을 얻을 수 있습니다.
00000000 00 20 21 00 83 df 13 0c 00 08 00 00 00 20 03 00 |. !.......... ..|
00000010 00 df 14 0c 05 19 0d cc 00 28 03 00 00 e0 2e 00 |.........(......|
00000020 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
00000030 00 19 0e cc 83 15 50 05 00 08 32 00 00 f8 0d 00 |......P...2.....|
5번째 바이트(83, 05, 00, 83)를 선택하여 4개의 값을 얻을 수 있습니다. 확장 파티션의 일반적인 "유형"은 05이지만 0f와 85도 사용됩니다. 바라보다https://www.win.tue.nl/~aeb/partitions/partition_types-1.html더 많은 정보를 알고 싶습니다.
이렇게 하면 확장 파티션(이 경우 두 번째 파티션)이 있는지 확인할 수 있고 숫자가 4보다 큰 파티션이 있는지 알 수 있습니다.
답변2
MBR 파티셔닝 방식을 사용하는 경우sd*[1-4]
, Linux는 기본 파티션용으로 처음 4개의 파티션 슬롯을 예약합니다(예:). 논리 파티션을 가지려면 이 4개의 파티션 중 하나를 확장 파티션으로 사용해야 합니다. 그러면 논리 파티션은 항상 슬롯 5부터 나타납니다.
MBR 파티션 디스크에는 일반적으로 하나 이상의 확장 파티션이 있어야 합니다. 자체 논리 파티션 체인이 있는 확장 파티션이 두 개 이상 있는 경우 큰 경고를 표시하고 더 이상 진행하지 않는 것이 올바른 조치일 수 있다고 생각합니다. 운영 체제 구문 분석 방법에 대한 아이디어가 다를 수 있습니다.
지정한 위치에서 /sys/block/sda/sda2/start
다음을 찾아야 합니다.EPBR(확장 파티션 부트 레코드)본질적으로 MBR의 간단한 버전입니다. 첫 번째 파티션 테이블 항목은 첫 번째 논리 파티션의 시작과 크기를 식별해야 합니다. 더 많은 논리적 파티션이 있는 경우 EPBR의 두 번째 파티션 항목은 다른 EPBR을 가리킵니다. 디스크 레이아웃을 완전히 분석하려면 EPBR 체인을 탐색해야 할 수도 있습니다.
답변3
당신이 단지 그것을 원하는 것 같군요 parted -l
. MBR 테이블과 확장 파티션이 있는 시스템 중 하나에서 얻은 내용은 다음과 같습니다.
$ sudo parted -l
Model: ASMT ASM1156-PM (scsi)
Disk /dev/sda: 1500GB
Sector size (logical/physical): 512B/4096B
Partition Table: msdos
Disk Flags:
Number Start End Size Type File system Flags
1 32.3kB 10.5GB 10.5GB primary ntfs boot
3 10.5GB 1500GB 1490GB primary ext4
Model: ASMT ASM1156-PM (scsi)
Disk /dev/sdb: 2000GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags:
Number Start End Size Type File system Flags
1 1049kB 1963GB 1963GB primary ext4 boot
2 1963GB 2000GB 37.7GB primary ext4
Model: SD USD (sd/mmc)
Disk /dev/mmcblk0: 16.0GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags:
Number Start End Size Type File system Flags
1 4194kB 1686MB 1682MB primary fat32 lba
2 1686MB 16.0GB 14.3GB extended
5 1686MB 1720MB 33.6MB logical ext4
6 1720MB 1792MB 72.4MB logical fat32 lba
7 1795MB 16.0GB 14.2GB logical ext4
이는 파티션이 기본 파티션인지, 확장 파티션인지, 논리 파티션(확장 파티션에서 생성된 파티션)인지 명확하게 보여줍니다. 또 다른 유용한 명령은 lsblk
동일한 시스템에서 인쇄하는 것입니다.
$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 1.4T 0 disk
├─sda1 8:1 0 9.8G 0 part
└─sda3 8:3 0 1.4T 0 part /media/pi/movies
sdb 8:16 0 1.8T 0 disk
├─sdb1 8:17 0 1.8T 0 part /media/pi/bigboy
└─sdb2 8:18 0 35.2G 0 part
mmcblk0 179:0 0 14.9G 0 disk
├─mmcblk0p1 179:1 0 1.6G 0 part
├─mmcblk0p2 179:2 0 1K 0 part
├─mmcblk0p5 179:5 0 32M 0 part
├─mmcblk0p6 179:6 0 69M 0 part /boot
└─mmcblk0p7 179:7 0 13.2G 0 part /
여기서는 크기가 무시할 만큼 파티션이 확장되었음을 알 수 있습니다( mmcblk02
확장 파티션, 1K로 표시됨).