Logo address

Partition (区分け)

2023/10/06

http:index2.html へ続く

はじめに

手持ちの古い HD(hard disk)を整理していると、Vista がインストールされた 2.5 インチ SATA HD に出会った。format して別の用途に使ってもよいのだが、ちょいと不思議に思うことがあって、調べてみることにした。手頃な教材として。僕は実例を見ないと解った気にならないから...

GPT については、まだ解らぬこといっぱい... 信頼できる文献が欲しい。

以下ではパーティション情報を調べているが、パーティションに関する操作は最も危険な操作であり、間違えるとコンピュータの全データが吹っ飛ぶ。パーティションの変更が発生する可能性がある操作は必ず不要なハードディスクに対して行うこと。

Partition Info.

Linux

After inserting the disk to maia (linux)

ubu$ ls -l /dev/sd*
brw-rw---- 1 root disk 8,  0  8月 23 18:30 /dev/sda
brw-rw---- 1 root disk 8,  1  8月 23 18:30 /dev/sda1
brw-rw---- 1 root disk 8,  2  8月 23 18:30 /dev/sda2
brw-rw---- 1 root disk 8,  3  8月 23 18:30 /dev/sda3
brw-rw---- 1 root disk 8, 16  9月 27 07:25 /dev/sdb
brw-rw---- 1 root disk 8, 17  9月 27 07:25 /dev/sdb1
brw-rw---- 1 root disk 8, 18  9月 27 07:25 /dev/sdb2
brw-rw---- 1 root disk 8, 21  9月 27 07:25 /dev/sdb5
ubu$

exec

	sudo fdisk /dev/sdb
in fdisk

Command (m for help): p

Disk /dev/sdb: 111.79 GiB, 120033041920 bytes, 234439535 sectors
Disk model: 106X
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x9247f3e2

Device     Boot     Start       End   Sectors  Size Id Type
/dev/sdb1  *         2048 116566015 116563968 55.6G  7 HPFS/NTFS/exFAT
/dev/sdb2       116567640 234436544 117868905 56.2G  5 Extended
/dev/sdb5       228765663 234436544   5670882  2.7G 82 Linux swap / Solaris

/dev/sdb1HPFS/NTFS/exFAT のどれかでフォーマットされていると思われる。どれなのかは、これからは分からない。拡張パーティションの中に Linux の swap パーティションが含まれている。Vista をインストールする前に、このディスクは Linux で使われていのではないかと推測するが、昔のことですっかり忘れている。

MacOS diskutil

Looking the disk on MacOS

mbook$ ls /dev/disk*
/dev/disk0	/dev/disk0s2	/dev/disk1	/dev/disk2s1
/dev/disk0s1	/dev/disk0s3	/dev/disk2	/dev/disk2s5
mbook$


mbook$ diskutil list
...
/dev/disk2 (external, physical):
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:     FDisk_partition_scheme                        *120.0 GB   disk2
   1:               Windows_NTFS                         59.7 GB    disk2s1
   2:                 Linux_Swap                         2.9 GB     disk2s5
mbook$
disk2s2 is not here.
MacOS は /dev/disk2(これは Linux の /dev/sdb2 に相当する)に関してもっと詳しい情報を提供している。これは NTFS なのだと。
他方では拡張パーティションの存在に関しては何も言わない。捉えそこねたのではなくて、必要なしと判断したのであろう。

mbook$ diskutil info /dev/disk2s1
   Device Identifier:        disk2s1
   Device Node:              /dev/disk2s1
   Whole:                    No
   Part of Whole:            disk2

   Volume Name:
   Mounted:                  Yes
   Mount Point:              /Volumes/Untitled

   Partition Type:           Windows_NTFS
   File System Personality:  NTFS
   Type (Bundle):            ntfs
   Name (User Visible):      Windows NT File System (NTFS)

   OS Can Be Installed:      No
   Media Type:               Generic
   Protocol:                 USB
   SMART Status:             Not Supported
   Volume UUID:              47E04978-EF4E-4277-BC05-0AE7280FDBE2

   Disk Size:                59.7 GB (59680751616 Bytes) (exactly 116563968 512-Byte-Units)
   Device Block Size:        512 Bytes

   Volume Total Space:       59.7 GB (59680747520 Bytes) (exactly 116563960 512-Byte-Units)
   Volume Used Space:        26.3 GB (26331676672 Bytes) (exactly 51429056 512-Byte-Units) (44.1%)
   Volume Available Space:   33.3 GB (33349070848 Bytes) (exactly 65134904 512-Byte-Units) (55.9%)
   Allocation Block Size:    4096 Bytes

   Read-Only Media:          No
   Read-Only Volume:         Yes

   Device Location:          External
   Removable Media:          Fixed
mbook$

NTFS の利用状態まで報告している。

mbook automatically mount the disk.
the contents is seen in /Volumes/Untitled

mbook$ ls -l /Volumes/Untitled
total 9002256
drwxr-xr-x@ 1 arisawa  staff           0  7  8  2011 $Recycle.Bin
-rwxr-xr-x  1 arisawa  staff        8192  7  8  2011 BOOTSECT.BAK
drwxr-xr-x@ 1 arisawa  staff        4096  7 11  2011 Boot
drwxr-xr-x@ 1 arisawa  staff           0 11  2  2006 Documents and Settings
-rwxr-xr-x  1 arisawa  staff         244  7  9  2011 Install.log
drwxr-xr-x  1 arisawa  staff           0  7  9  2011 Intel
drwxr-xr-x@ 1 arisawa  staff           0  7  8  2011 MSOCache
drwxr-xr-x  1 arisawa  staff       12288  7 29  2011 Program Files
drwxr-xr-x@ 1 arisawa  staff        4096  7 29  2011 ProgramData
-rwxr-xr-x  1 arisawa  staff        1841  7  9  2011 RHDSetup.log
drwxr-xr-x@ 1 arisawa  staff       12288  8  2  2011 System Volume Information
drwxr-xr-x  1 arisawa  staff        4096  7  8  2011 Users
drwxr-xr-x  1 arisawa  staff       20480  8  2  2011 Windows
-rwxr-xr-x  1 arisawa  staff          24  9 19  2006 autoexec.bat
-rwxr-xr-x@ 1 arisawa  staff      443912  7 11  2011 bootmgr
-rwxr-xr-x  2 arisawa  staff          10  9 19  2006 config.sys
-rwxr-xr-x@ 1 arisawa  staff  2147483648  1  3  2022 hiberfil.sys
-rwxr-xr-x@ 1 arisawa  staff  2461212672  1  3  2022 pagefile.sys
-rwxr-xr-x  1 arisawa  staff         218  1  3  2022 service.log
mbook$
mbook can mount NTFS in this disk

Plan9 fdisk

hebe# ls /dev/sd*
/dev/sdE0/9fat
/dev/sdE0/ctl
...
/dev/sdE1/raw
/dev/sdU76a40/ctl
/dev/sdU76a40/data
/dev/sdU76a40/linuxswap
/dev/sdU76a40/ntfs
/dev/sdU76a40/raw
/dev/sdctl
hebe# ls -l /dev/sdU76a40
--rw-rw-r-- M 1062929 arisawa arisawa            0 Jan  1  1970 /dev/sdU76a40/ctl
--rw-r----- M 1062929 arisawa arisawa 120033041920 Jan  1  1970 /dev/sdU76a40/data
--rw-r----- M 1062929 arisawa arisawa   2903491584 Jan  1  1970 /dev/sdU76a40/linuxswap
--rw-r----- M 1062929 arisawa arisawa  59680751616 Jan  1  1970 /dev/sdU76a40/ntfs
--rw-r----- M 1062929 arisawa arisawa            0 Jan  1  1970 /dev/sdU76a40/raw
hebe# disk/fdisk /dev/sdU76a40/data
cylinder = 8225280 bytes
 * p1                      0 7256         (7256 cylinders, 55.58 GB) HPFS
   empty                7256 14240        (6984 cylinders, 53.50 GB)
   s2                  14240 14593        (353 cylinders, 2.70 GB) LINUXSWAP
>>> q
hebe#

Plan9(9front) では、デバイスファイルを普通のファイルとして見せている。すなわち

	/dev/sdU76a40/data
が usb 接続された sata HD の内容である。ここは unix と違うところ。
このままでは sata HD にデータを読み取るなどの命令を送れない。(本来はかなり原始的な命令だったはずである)
/dev/sdU76a40/raw は sata HD を制御するために存在するのであろう。

MBR (Master Boot Record)

IBM-PC 互換機
ムーアの法則によってパソコンの記憶容量が指数関数的に増えていく
FD(フロッピーディスク)
HD(ハードディスク)
BIOS
起動ドライブ
起動ドライブの最初のセクター(sector)の先頭は 8086 命令*
読み書きの最小単位
シリンダー(cylinder)数
1シリンダーに含まれるセクター数
HD 毎に異なる

統一的に扱うために
HD を Byte 列と考えて
論理ブロック(logical block) (単にセクターとも言われる)
512B
を単位にアドレス(0,1,2,...)やサイズを扱う。
logical block address

MBR は各 HD の
LBA 0
size 1


注*: 詳しくは文献[1]を見よ。なかなか良い。

[1]: Day 2: ブートローダ(MBR)
https://ja.tech.jar.jp/ac/2018/day02.html

[2]: Wiki: Master boot record

MBR の例

HD を区分けして使う
各 HD の MBR に区分け情報

図1: MBR

枠で囲った 64B(=16✕4 B) -- from addr 0x1be to 0x1fd.
ここに4つの partition の情報が含まれている。続く 2B (55 AA) は boot signature と呼ばれている。後に説明する PBR と EBR にも同じ signature が含まれている。

first partition info: (文献[]では "Partition table entries" と呼んでいる)

	80 20 21 00 07 FE FF FF 00 08 00 00 00 A0 F2 06
second partition info:
	00 FE FF FF 05 FE FF FF 58 AE F2 06 69 89 06 07
third and fourth partition info:
	00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
つまりこの disk では実際には2つの partition が定義されている。

Partition table entry は
各エントリの構造

オフセット サイズ 内容
0 1 ブートフラグ(0x80 = ブート可, 0x00 = ブート不可)
1 3 パーティションの最初のセクタ。CHS 方式での値
4 1 パーティションの種類(パーティション識別子)
5 3 パーティションの最後のセクタ。CHS 方式での値
8 4 パーティションの最初のセクタ。LBA 方式での値
12 4 パーティションの全セクタ数
現在では CHS 方式のアドレスは(よほど小さいディスクで無い限り)意味を失っている。
partition type (パーティション識別子) は(例えば文献[3]によると)
	07	-- hpfs(High Performance FS) (他にいろいろな可能性がある)
	05  	-- extended
それらの置き場所の情報は各々
	00 08 00 00
	58 AE F2 06
から得られるが、(8086 で扱いやすい little endian になっているので) big endian に治すと(順序を反転させて)各々
	00 00 08 00	--> 0x800
	06 F2 AE 58	--> 0x6f2ae58
のようにして LBA を単位とした partition のアドレスが得られる。Ba(Byte address)に変換するには 512 倍する。それらは各々
	0x100000
	0xde55cb000
である。

size 情報は各々

	00 A0 F2 06
	69 89 06 07
に含まれるが、これらは little endian で表された lba である。通常の意味でのサイズは各々
	0x06f2a000*512 B	--> 59680751616 B
	0x07068969*512 B	--> 60348879360 B
である。

first partition の first sector の byte アドレスを計算すると 0x0100000 である。

[3] Wikipedia: Partition Type