LoginSignup
2
4

More than 5 years have passed since last update.

LinuxでRAWイメージにGRUB2をインストールする

Posted at

はじめに

RAWイメージの作成は各所でTipsが紹介されているが、GRUB(ブートローダ)をインストールしたりなどの手順は余り紹介されていないので、ここに記す。
具体的にどのような時に使うかというと、私の場合はOSを自作したりする時に使う。

この記事で行うこと

  1. RAWイメージの作成とパーティション分割、フォーマット
  2. RAWイメージへのGRUB2のインストール

対象環境

  • CentOS 6.8

RAWイメージの作成

RAWイメージの作成はLinuxでは一般的である。
dd コマンドを用いてRAWイメージを作成する

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で指定をする。

GRUB2のインストール
$ 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
2
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
4