Linux에서 파티션이 확장되었는지 기본인지 확인하는 방법

Linux에서 파티션이 확장되었는지 기본인지 확인하는 방법

(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로 표시됨).

관련 정보