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つの拡張パーティションが必要である必要はありません。拡張パーティションを使用しない限り、非拡張パーティションが重複することはできません。

したがって、特にパーティション1をより小さなブートパーティションにし、パーティション2はパーティション1にないすべてをカバーし、パーティション3はパーティション2の前半を覆って「拡張」タイプになり、パーティション4はパーティションにすることができます。 2後半。パーティション2.パーティション3には、それぞれパーティション3の半分を占めるパーティション5と6があります。実際には、パーティション2を使用しない限り、これはすべてうまくいきます。ただし、パーティション 5 と 6 は両方ともパーティション 2 3 にあるため、「階層構造」は DAG (方向性非循環グラフ) ではないため、「顧客要件」できない解く。

そのような顧客に私が与えるアドバイスは、手数料を2倍に増やすことです。

基本/拡張パーティションの「タイプ」は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より多くの情報を知りたいです。

これにより、拡張パーティション(この場合は2番目のパーティション)があることを確認し、数字が4より大きいパーティションがあるかどうかを確認できます。

答え2

MBRパーティショニング方式を使用する場合sd*[1-4]、Linuxはデフォルトパーティション用に最初の4つのパーティションスロットを予約します(例:)。論理区画を持つには、これら4つの区画のうちの1つを拡張区画として使用する必要があります。これにより、論理区画は常にスロット5から表示されます。

MBRパーティションディスクには通常、1つ以上の拡張パーティションが必要です。独自の論理パーティションチェーンを持つ2つ以上の拡張パーティションがある場合は、大きな警告を表示し、それ以上進行しないことが正しいアクションであると思います。オペレーティングシステムの解析方法の考え方が異なる場合があります。

指定した場所で/sys/block/sda/sda2/start以下を見つける必要があります。EPBR(拡張パーティションブートレコード)本質的にMBRのシンプルなバージョンです。最初のパーティション表エントリーは、最初の論理区画の始まりとサイズを識別する必要があります。より多くの論理区画がある場合、EPBRの2番目の区画項目は別のEPBRを指します。ディスクレイアウトを完全に分析するには、EPBRチェーンをナビゲートする必要があるかもしれません。

答え3

あなたはそれをしたいと思いますparted -l。 MBRテーブルと拡張パーティションを持つシステムの1つから得たものは次のとおりです。

$ 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で示されています)。

関連情報