クアッドブート with rEFInd (その 2/5): パーティションを切る
Linux ×2、FreeBSD ×2 クアッドブート (with rEFInd) の第 2 回です。ストレージにパーティションを切って、クアッドブートにするための下地を整えます。
目次
事前にやっておくこと
必要に応じて Windows のバックアップを取っておきます。また、SecureBoot は FreeBSD のインストーラが対応していないため、UEFI 設定画面で無効にします。SecureBoot を無効にするためには、あらかじめ Windows の BitLocker (デバイスの暗号化) も無効にしておく必要があるようです。
それから、パーティションを切るために何らかのパーティショニングツールが必要です。本稿では FreeBSD インストーラーに付属の gpart コマンドを使用することにします。前回の記事のようにインストールメディアを用意しておいてください。他のツール (GParted Live など) を使う場合は、適当に読み替えてください。
パーティショニングツールを起動する
ストレージの現状を把握する
ストレージを更地にしてしまう前に、次の情報を取得しておくとよいかと思います。
- 対象ストレージのデバイス名
- 論理セクタサイズ
- 物理セクタサイズ
- 総容量
- パーティション情報 (開始セクタ、サイズなど)
これらの情報は、次節で各パーティションの開始セクタを決めるときや、ストレージを工場出荷状態に戻したいときなどに役立ちます。
ストレージのデバイス名を知る
最初に、このあとの操作で必要となる、対象ストレージのデバイス名をゲットします。とりあえず geom disk list コマンドでストレージの一覧を表示してみると、
# geom disk list
Geom name: nda0
Providers:
1. Name: nda0
Mediasize: 1024209543168 (954G)
...
Geom name: da0
Providers:
1. Name: da0
Mediasize: 15505293312 (14G)
...
Geom name: da1
Providers:
1. Name: da1
Mediasize: 15505293312 (14G)
...
この例では、内蔵ストレージが 1 台と、USB メモリが 2 個挿さっていますが、容量から判断して nda0 が内蔵ストレージっぽいなとわかります。
論理セクタサイズと物理セクタサイズ
世の中には、「512 ネイティブ」「4K ネイティブ」「Advanced Format (512E)」という 3 種類のハードディスク / SSD が出回っているそうです:
- 512 ネイティブ (512n): 論理セクタサイズ、物理セクタサイズともに 512 バイト
- 4K ネイティブ (4Kn): 論理セクタサイズ、物理セクタサイズともに 4096 バイト
- Advanced Format (512E): 論理セクタサイズが 512 バイト、物理セクタサイズが 4096 バイト
で、512E の場合、論理セクタの境界と物理セクタの境界がぴったり合っていないと、データアクセスのパフォーマンスが低下します (詳しくは「4K アライメント」などでググってください)。そこで diskinfo コマンドを使って論理セクタサイズと物理セクタサイズを取得します。
# diskinfo -v nda0
nda0
512 # sectorsize
1024209543168 # mediasize in bytes (954G)
2000409264 # mediasize in sectors
4096 # stripesize
...
sectorsize が論理セクタサイズ、stripesize が物理セクタサイズです。つまりこのストレージは 512E であることがわかります。
総容量
ストレージの総容量も上記 diskinfo コマンドの出力からわかります。セクタ数で 2000409264 セクタ、バイト数に直すと 2000409264 × 512 で 1024209543168 バイト (約 954 GiB) です。
パーティション情報
現状把握作業のラストは、どんなパーティションがあるか?とその開始セクタ、パーティションサイズなどの情報です。gpart show コマンドを使います。
# gpart show -l nda0
=> 34 2000409197 nda0 GPT (954G)
34 2014 - free - (1007K)
2048 532480 1 EFI system partition (260M)
534528 32768 2 Microsoft reserved partition (16M)
567296 1954429583 3 Basic data partition (932G)
1954996879 1393 - free - (697K)
1954998272 2934784 4 (null) (1.4G)
1957933056 41943040 5 Basic data partition (20G)
1999876096 532480 6 Basic data partition (260M)
2000408576 655 - free - (328K)
一般に、パーティションを切る際には、次の点を考慮するのがよいとされています。
- (1) 先頭パーティションの開始セクタは 2048 が推奨される。
- (2) 第 2 パーティション以降の開始セクタは 8 の倍数とする (4096 / 512 = 8 に由来)。
- (3) パーティションのサイズ (バイト数) は 4096B (= 4KB) の倍数とする (4K アライメント)。
このうち (2) については、今はどうなのか知りませんが、以前 gdisk というツールを使ったときに 2048 の倍数になっていないと怒られた記憶があります。そこで私は (1)、(2) をまとめて次の 2 点を考慮するようにしています。
- 各パーティションの開始セクタは 2048 の倍数になるようにする。
- パーティションのサイズ (バイト数) は 4096B (= 4KB) の倍数とする (4K アライメント)。
この点をふまえて、上の結果を観察してみましょう。
最初に現れる 2014 セクタの free な領域は、第 1 パーティションを 2048 セクタ目から開始するための詰め物です。この領域は 34 セクタ目から始まっています。その前には何があるかというと、Protective MBR と Primary Partition Table というものがあります。
- 参考: UEFI Specification 2.10 第 5.3.1 節参照https://uefi.org/specs/UEFI/2.10/05_GUID_Partition_Table_Format.html#guid-partition-table-gpt-disk-layout-1
次にパーティション 1 ~ 3 があります。順にEFI システムパーティション、Microsoft 予約パーティション、C ドライブ用パーティションです。そのあとに (恐らくパーティション 4 を 2048 の倍数のセクタから開始するための詰めものとして) free な領域があって、パーティション 4 ~ 6 が続きます。これらは WinRE や ASUS 独自のリカバリー領域と思われます。こうしてみると、いずれのパーティションも上に挙げた 2 つの条件をきっちり守っています。
最後に 655 セクタ分の free な領域がありますが、これはアライメントの条件を守ったために生じた端数と思われます。また、上の出力には表示されない謎の領域が、ディスクの末尾に 33 セクタ分 (= 2000409264 - (2000408576 + 655)) あります。ここには Backup Partition Table が格納されていると思われます (UEFI Specification 2.10 第 5.3.1 節参照)。
パーティション構成を検討する
前出の「パーティションの開始セクタを 2048 の倍数にすること」「パーティションのサイズは 4096 の倍数にすること」の 2 条件と、前回ざっくりと決めた各パーティションの容量配分を元に、次のように各パーティションを作ることにしました。
| No. | 開始セクタ | サイズ [sector] | サイズ | 用途 (or ディスクラベル) | ファイルシステム | 暗号化 |
|---|---|---|---|---|---|---|
| 1 | 2048 | 1048576 | 512 MiB | ESP | FAT32 | ― |
| 2 | 1050624 | 2097152 | 1 GiB | zorin-boot | ext4 | ― |
| 3 | 3147776 | 708837376 | 338 GiB | zorin-root | ext4 | LUKS |
| 4 | 711985152 | 2097152 | 1 GiB | artix-boot | ext4 | ― |
| 5 | 714082304 | 708837376 | 338 GiB | artix-root | ext4 | LUKS |
| 6 | 1422919680 | 92274688 | 44 GiB | freebsd-a-root | UFS | ― |
| 7 | 1515194368 | 167772160 | 80 GiB | freebsd-a-home | UFS | Geli |
| 8 | 1682966528 | 16777216 | 8 GiB | freebsd-a-swap | ― | Geli |
| 9 | 1699743744 | 92274688 | 44 GiB | freebsd-b-root | UFS | ― |
| 10 | 1792018432 | 167772160 | 80 GiB | freebsd-b-home | UFS | Geli |
| 11 | 1959790592 | 16777216 | 8 GiB | freebsd-b-swap | ― | Geli |
| 12 | 1976567808 | 20971520 | 10 GiB | 共有 | FAT32 | ― |
各パーティションにはディスクラベルを付けておくと、あとで何かと便利なので、パーティション 2 ~ 11 に関しては表のように付けることにします。
また、この表にはありませんが、ディスクの先頭に Protective MBR & Primary Partition Table が、末尾に Backup Partition Table が、それぞれ 40 セクタ分だけ付きます。これは gpart コマンドが勝手にやってくれるので、気にしなくて大丈夫です。
パーティションを切る
あとはこの表にしたがって黙々とコマンドを打っていくだけです、が、gpart は 「ディスクを消去しますか?」みたいな確認を一切行わず、与えられたコマンドをその場でバンバン実行していくつくりになっているみたいなので、慎重に進めるようにしてください。
まず現在のパーティションを全削除します。
# gpart destroy -F nda0
nda0 destroyed
# gpart show -l nda0
gpart: No such geom: nda0.
新しいパーティションスキームを作成します。
# gpart create -s gpt nda0
上のほうで検討した表にしたがってパーティション 1 ~ 12 を作成します。
# gpart add -i 1 -t efi -b 2048 -s 1048576 nda0
# gpart add -i 2 -t linux-data -s 2097152 -l zorin-boot nda0
# gpart add -i 3 -t linux-data -s 708837376 -l zorin-root nda0
# gpart add -i 4 -t linux-data -s 2097152 -l artix-boot nda0
# gpart add -i 5 -t linux-data -s 708837376 -l artix-root nda0
# gpart add -i 6 -t freebsd-ufs -s 92274688 -l freebsd-a-root nda0
# gpart add -i 7 -t freebsd-ufs -s 167772160 -l freebsd-a-home nda0
# gpart add -i 8 -t freebsd-swap -s 16777216 -l freebsd-a-swap nda0
# gpart add -i 9 -t freebsd-ufs -s 92274688 -l freebsd-b-root nda0
# gpart add -i 10 -t freebsd-ufs -s 167772160 -l freebsd-b-home nda0
# gpart add -i 11 -t freebsd-swap -s 16777216 -l freebsd-b-swap nda0
# gpart add -i 12 -t ms-basic-data -s 20971520 nda0
出来映えを確認。
# gpart show -l nda0
=> 40 2000409184 nda0 GPT (954G)
40 2008 - free - (1004K)
2048 1048576 1 (null) (512M)
1050624 2097152 2 zorin-boot (1.0G)
3147776 708837376 3 zorin-root (338G)
711985152 2097152 4 artix-boot (1.0G)
714082304 708837376 5 artix-root (338G)
1422919680 92274688 6 freebsd-a-root (44G)
1515194368 167772160 7 freebsd-a-home (80G)
1682966528 16777216 8 freebsd-a-swap (8.0G)
1699743744 92274688 9 freebsd-b-root (44G)
1792018432 167772160 10 freebsd-b-home (80G)
1959790592 16777216 11 freebsd-b-swap (8.0G)
1976567808 20971520 12 (null) (10G)
1997539328 2869896 - free - (1.4G)
いいんではないでしょうか。これでようやく OS のインストールに取りかかれます。
関連記事
- クアッドブート with rEFInd (その 1/5): オリエンテーションhttps://retrotecture.jp/multiboot/quadboot_llff_1.html
- クアッドブート with rEFInd (その 3/5): Zerin OS と rEFInd のインストールhttps://retrotecture.jp/multiboot/quadboot_llff_3.html
- クアッドブート with rEFInd (その 4/5): Artix Linux のインストールhttps://retrotecture.jp/multiboot/quadboot_llff_4.html
- クアッドブート with rEFInd (その 5/5): FreeBSD (×2) のインストールhttps://retrotecture.jp/multiboot/quadboot_llff_5.html
広告
