前書き:何故HDDを2TBまでしか認識しないか
本記事では、gdisk/mkfsコマンドを用いて2TB超のHDDをフォーマットする方法を紹介します。
前提知識ですが、HDDは2TBの壁が存在します。HDDは、MBR(Master Boot Record)形式を用いて、パーティション(領域)をセクター単位で管理しています。通常のHDDは、セクターサイズが512Byteであり、パーティション内のセクター開始位置とセクター数の管理には4Byte(32bit)を使用します。この制約によって、「最大2TB(アクセスできるセクター数×セクターサイズ = 2の32乗×512)」までしか管理できません。
つまり、MBRにしか対応していないコマンド(例:fdisk)でHDDフォーマットを実行した場合、2TBまでしか認識しません。**2TB以上のHDDを取り扱う場合は、gdiskコマンドを使用します。**gdiskは、GPT(GUID Partition Table)形式でHDD領域を管理します。GPTは、セクター管理に8Byte(64bit)を使用できるため、最大8ZB(=2の64乗×512Byte)まで管理できます。一般的なHDDサイズ(2TB〜8TB)であれば、確実にフォーマットできます。
検証環境
Debian10環境とWestern DigitalのHDD(4TB、3.5インチ)を使用します。
_,met$$$$$gg. nao@debian
,g$$$$$$$$$$$$$$$P. ----------
,g$$P" """Y$$.". OS: Debian GNU/Linux 10 (buster) x86_64
,$$P' `$$$. Kernel: 4.19.67
',$$P ,ggs. `$$b: Uptime: 1 hour, 44 mins
`d$$' ,$P"' . $$$ Packages: 2282 (dpkg)
$$P d$' , $$P Shell: fish 3.0.2
$$: $$. - ,d$$' Resolution: 2560x1080
$$; Y$b._ _,d$P' DE: Cinnamon 3.8.8
Y$$. `.`"Y$$$$P"' WM: Mutter (Muffin)
`$$b "-.__ WM Theme: (Albatross)
`Y$$ Theme: Blackbird [GTK2/3]
`Y$$. Icons: hicolor [GTK2/3]
`$$b. Terminal: gnome-terminal
`Y$$b. CPU: AMD Ryzen 7 3800X 8- (16) @ 3.900GHz
`"Y$b._ GPU: NVIDIA NVIDIA Corporation TU107
`""" Memory: 37627MiB / 64404Mi
gdiskのインストール
以下の手順でgdiskコマンドをインストール可能です。また、HDDがどのPATH(/dev/sd*)で認識されているかを調べるために、hwinfoコマンドも一緒にインストールします。
$ sudo apt install gdisk
$ sudo apt install hwinfo (注釈):ハードウェア情報を調べるコマンド
フォーマット対象のHDDを調査する方法
フォーマット対象のPATH情報(/dev/sd*のいずれか)を明確にしなければ、OSが入ったSSDやHDDを誤って消去する可能性があります。そこで、hwinfoコマンドを用いて、HDDの型番情報から、フォーマット対象のHDD PATHを明確にします。
$ sudo hwinfo --disk --short
disk:
/dev/sdb WDC WD40EZRZ-00G
/dev/sdc WDC WDS200T2B0B
/dev/sda WDC WD40EZRZ-00G
hwinfo出力結果のWDはWestern Digitalの略で、検証環境ではWD社のデバイスが3個認識されている事になります。TOSHIBAやSeagateのHDDも、会社名が出力されます。上記の情報(型番)だけで、フォーマット対象が明確にならなかった場合は、shortオプションを削除すれば詳細な情報が得られます。
$ sudo hwinfo --disk
47: IDE 600.0: 10600 Disk
[Created at block.245]
Unique ID: WZeP.L6meSe08MpF
Parent ID: vTuk.bD2u07ABOQ0
SysFS ID: /class/block/sdb
SysFS BusID: 6:0:0:0
SysFS Device Link: /devices/pci0000:00/0000:00:01.2/0000:01:00.0/0000:02:0a.0/0000:06:00.0/ata7/host6/target6:0:0/6:0:0:0
Hardware Class: disk
Model: "WDC WD40EZRZ-00G"
Vendor: "WDC"
Device: "WD40EZRZ-00G"
Revision: "0A80"
Serial ID: "WD-WCC7K4KTAKFF"
Driver: "ahci", "sd"
Driver Modules: "ahci", "sd_mod"
Device File: /dev/sdb
Device Files: /dev/sdb, /dev/disk/by-path/pci-0000:06:00.0-ata-6, /dev/disk/by-id/wwn-0x50014ee2bc1287b7, /dev/disk/by-id/ata-WDC_WD40EZRZ-00GXCB0_WD-WCC7K4KTAKFF
Device Number: block 8:16-8:31
Geometry (Logical): CHS 486401/255/63
Size: 7814037168 sectors a 512 bytes
Capacity: 3726 GB (4000787030016 bytes)
Config Status: cfg=new, avail=yes, need=no, active=unknown
Attached to: #29 (SATA controller)
48: IDE d00.0: 10600 Disk
[Created at block.245]
Unique ID: _kuT.+VX7mUETFg8
Parent ID: IluS.Zk47+4RfXI1
SysFS ID: /class/block/sdc
SysFS BusID: 13:0:0:0
SysFS Device Link: /devices/pci0000:00/0000:00:08.3/0000:0b:00.0/ata14/host13/target13:0:0/13:0:0:0
Hardware Class: disk
Model: "WDC WDS200T2B0B"
Vendor: "WDC"
Device: "WDS200T2B0B"
Revision: "90WD"
Serial ID: "192489800726"
Driver: "ahci", "sd"
Driver Modules: "ahci", "sd_mod"
Device File: /dev/sdc
Device Files: /dev/sdc, /dev/disk/by-id/wwn-0x5001b448b8e26e9a, /dev/disk/by-id/ata-WDC_WDS200T2B0B_192489800726, /dev/disk/by-path/pci-0000:0b:00.0-ata-6
Device Number: block 8:32-8:47
Geometry (Logical): CHS 243201/255/63
Size: 3907029168 sectors a 512 bytes
Capacity: 1863 GB (2000398934016 bytes)
Config Status: cfg=new, avail=yes, need=no, active=unknown
Attached to: #10 (SATA controller)
49: IDE 500.0: 10600 Disk
[Created at block.245]
Unique ID: 3OOL.Kn_944YJ_eE
Parent ID: vTuk.bD2u07ABOQ0
SysFS ID: /class/block/sda
SysFS BusID: 5:0:0:0
SysFS Device Link: /devices/pci0000:00/0000:00:01.2/0000:01:00.0/0000:02:0a.0/0000:06:00.0/ata6/host5/target5:0:0/5:0:0:0
Hardware Class: disk
Model: "WDC WD40EZRZ-00G"
Vendor: "WDC"
Device: "WD40EZRZ-00G"
Revision: "0A80"
Serial ID: "WD-WCC7K4KTA98E"
Driver: "ahci", "sd"
Driver Modules: "ahci", "sd_mod"
Device File: /dev/sda
Device Files: /dev/sda, /dev/disk/by-id/ata-WDC_WD40EZRZ-00GXCB0_WD-WCC7K4KTA98E, /dev/disk/by-uuid/6cefaadb-8064-4177-be4d-4c96c50985ee, /dev/disk/by-id/wwn-0x50014ee2bc1263df, /dev/disk/by-path/pci-0000:06:00.0-ata-5
Device Number: block 8:0-8:15
Geometry (Logical): CHS 486401/255/63
Size: 7814037168 sectors a 512 bytes
Capacity: 3726 GB (4000787030016 bytes)
Config Status: cfg=new, avail=yes, need=no, active=unknown
Attached to: #29 (SATA controller)
hwinfoコマンドではなく、fdiskコマンドでも詳細な情報を取得できます。以下のfdiskコマンドは、別環境の結果なので、出力例として読んでください。
$ sudo fdisk -l
(省略)
Disk /dev/sda: 1.8 TiB, 2000398934016 bytes, 3907029168 sectors
Disk model: Tech
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disk /dev/sdb: 931.5 GiB, 1000204886016 bytes, 1953525168 sectors
Disk model:
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disklabel type: dos
Disk identifier: 0xed79b4be
Device Boot Start End Sectors Size Id Type
/dev/sdb1 2048 1953525167 1953523120 931.5G 83 Linux
Disk /dev/sdc: 119.2 GiB, 128035676160 bytes, 250069680 sectors
Disk model: TS128GESD400K
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 33553920 bytes
Disklabel type: dos
Disk identifier: 0x3eaccbac
Device Boot Start End Sectors Size Id Type
/dev/sdc1 8192 532479 524288 256M c W95 FAT32 (LBA)
/dev/sdc2 532480 250069679 249537200 119G 83 Linux
gdiskコマンドによるパーティション作成
私の環境では、フォーマット対象のHDDは/dev/sdbです。gdiskコマンドを起動すると、GPT形式ではなくMBR形式でHDDが管理されているため、警告が出ます。今回のフォーマットでは、MBRをGPTに変換することが目的ですから、この警告は無視します。
$ sudo gdisk /dev/sdb
GPT fdisk (gdisk) version 1.0.3
Partition table scan:
MBR: MBR only
BSD: not present
APM: not present
GPT: not present
***************************************************************
Found invalid GPT and valid MBR; converting MBR to GPT format
in memory. THIS OPERATION IS POTENTIALLY DESTRUCTIVE! Exit by
typing 'q' if you don't want to convert your MBR partitions
to GPT format!
***************************************************************
gdiskは、対話式で操作する必要があります。以降の手順では、
- d:既存パーティションの削除
- o:新しいGPT(GUID Partition Table)を作成
- n:新しいパーティションを作成
- p:現在のパーティションを確認
- w:ディスクに変更を書き込む
を順に実施します。既存パーティションは全て削除し、新しいパーティションは1個だけ作成します。選択肢は基本的にYesかDefault値で回答します。
$ sudo gdisk /dev/sdb
Command (? for help): d 注釈):パーティションの消去
Using 1
Command (? for help): d
No partitions (注釈):パーティションを全て削除済み
Command (? for help): o (注釈):GPT作成
This option deletes all partitions and creates a new protective MBR.
Proceed? (Y/N): y
Command (? for help): n (注釈):新しいパーティションの作成
Partition number (1-128, default 1): (注釈):デフォルト値とするため、Enter
First sector (34-7814037134, default = 2048) or {+-}size{KMGTP}: (注釈):デフォルト値とするため、Ente
Last sector (2048-7814037134, default = 7814037134) or {+-}size{KMGTP}: (注釈):デフォルト値とするため、Enter
Current type is 'Linux filesystem'
Hex code or GUID (L to show codes, Enter = 8300): (注釈):デフォルト値とするため、Enter
Changed type of partition to 'Linux filesystem'
Command (? for help): p (注釈):パーティションの確認
Disk /dev/sdb: 7814037168 sectors, 3.6 TiB
Model: WDC WD40EZRZ-00G
Sector size (logical/physical): 512/4096 bytes
Disk identifier (GUID): 7BABC8AE-DFD4-4249-9877-E00C4E8A169C
Partition table holds up to 128 entries
Main partition table begins at sector 2 and ends at sector 33
First usable sector is 34, last usable sector is 7814037134
Partitions will be aligned on 2048-sector boundaries
Total free space is 2014 sectors (1007.0 KiB)
Number Start (sector) End (sector) Size Code Name
1 2048 7814037134 3.6 TiB 8300 Linux filesystem
Command (? for help): w (注釈):上記手順をHDDに反映
Final checks complete. About to write GPT data. THIS WILL OVERWRITE EXISTING
PARTITIONS!!
Do you want to proceed? (Y/N): Y (注釈):最終確認
OK; writing new GUID partition table (GPT) to /dev/sdb.
The operation has completed successfully.
パーティションをext4形式でフォーマット
gdiskコマンドによって、/dev/sdb1パーティションが作成されています。このパーティションをmkfsコマンドによって、ext4ファイルシステムでフォーマットします。
$ sudo mkfs -t ext4 /dev/sdb1
mke2fs 1.44.5 (15-Dec-2018)
/dev/sdb1 contains a ext4 file system
last mounted on Sun Sep 29 13:59:01 2019
Proceed anyway? (y,N) y
Creating filesystem with 976754385 4k blocks and 244195328 inodes
Filesystem UUID: fecb3b9a-af4a-4a09-abdd-3fa633beaaa6
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
4096000, 7962624, 11239424, 20480000, 23887872, 71663616, 78675968,
102400000, 214990848, 512000000, 550731776, 644972544
Allocating group tables: done
Writing inode tables: done
Creating journal (262144 blocks): done
Writing superblocks and filesystem accounting information: done
ここまでの手順で、フォーマットされたHDDが使用可能な状態になります。
