はじめに
RAWイメージの作成は各所でTipsが紹介されているが、GRUB(ブートローダ)をインストールしたりなどの手順は余り紹介されていないので、ここに記す。
具体的にどのような時に使うかというと、私の場合はOSを自作したりする時に使う。
この記事で行うこと
- RAWイメージの作成とパーティション分割、フォーマット
- RAWイメージへのGRUB2のインストール
対象環境
- CentOS 6.8
RAWイメージの作成
RAWイメージの作成はLinuxでは一般的である。
dd
コマンドを用いてRAWイメージを作成する
$ dd if=/dev/zero of=出力ファイル名 count=1 bs=所望のサイズ
パーティションの作成とフォーマット
パーティションを分割するためには、まずはRAWイメージをループバックデバイスとして接続しなければならない。これはISOイメージをマウントする時に、mount
コマンドで-o loop
として指定する時に行っていることと同じである。
$ losetup --find --show RAWイメージファイル
/dev/loop0
上記コマンドを実行すると、/dev/loop[0-7]
デバイスにRAWイメージが接続された状態となる。なにもループバックデバイスに接続されていない状態では/dev/loop0
に接続されるだろう。
以降は通常のブロックデバイス同様、mkfs
コマンド、及びfdisk
コマンド等を用いてパーティションの分割と、パーティションのフォーマットを行うことができる。
# parted /dev/loop0
GNU Parted 2.1
Using /dev/loop0
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) mklabel gpt
Warning: The existing disk label on /dev/loop0 will be destroyed and all data on this disk will be lost. Do you want to continue?
Yes/No? yes
(parted) mkpart primary ext4 1 512M
(parted) mkpart primary ext4 514M 1024M
(parted) set 1 boot on
(parted) print
Model: (file)
Disk /dev/loop0: 1074MB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Number Start End Size File system Name Flags
1 1049kB 512MB 511MB primary boot
2 514MB 1024MB 511MB
ここでは例として2つのパーティションを作成したものとする。
作成したパーティションはそのままではOSに認識されていないため、パーティション作成後に改めて登録する必要がある。このときkpartx
コマンドを使用する。
$ kpartx -a /dev/loop0
上記コマンドを実行すると、作成した2つのパーティションが/dev/mapper
以下にloopXpYのような名前となって現れる。
$ ls /dev/mapper/loop0*
/dev/mapper/loop0p1 /dev/mapper/loop0
この例では/dev/loop0に作成した2つのパーティションは/dev/mapper/loop0p1
、/dev/mapper/loop0p2
となった。パーティションをフォーマットする場合は、これらのデバイスに対してmkfs
コマンドを実行すれば良い。
$ mkfs -t ext4 /dev/mapper/loop0p1
$ mkfs -t ext4 /dev/mapper/loop0p2
GRUB2のインストール
ここでは前章までで作成したパーティション/dev/loop0p1
をブートパーティションとして、GRUB2をインストールする。
まずはパーティションをマウントし、GRUB2用のディレクトリを作成する。
$ mount /dev/loop0p2 /mnt
$ mkdir /mnt/boot
$ mount /dev/loop0p1 /mnt/boot
その後、grub-install
コマンドを使用してGRUB2をインストールする。
このときブートディレクトリは/boot
となるはずなので、オプション--boot-directory
で指定をする。
$ grub-install --boot-directory=/boot /dev/loop0
Installation finished. No error reported.
後片付け
まず、パーティションをアンマウントする
$ umonut /mnt/boot
$ umount /mnt
RAWイメージのパーティションを認識させないようにして、ループバックデバイスから取り外しを行う。
$ kpartx -d /dev/loop0
$ losetup -d /dev/loop0