GPT を用いてディスクのパーティションを設定2009年02月19日 00時02分21秒

データを壊したついでに、新しいことを試す。今回は、fdisk や bsdlabel ではなく、gpt にて、ディスクを区切ってみる。実は、FreeBSD 6.4/7.1 からサポートされたらしい。リリースノートを見た時は、全然気にしていなかった。

何も設定していないが、gpt で表示を試みる。


$ gpt show /dev/da0
gpt show: error: bogus map
gpt show: unable to open device '/dev/da0': No such file or directory
$ ls -sld /dev/da0
0 crw-r-----  1 root  operator    0, 144 Feb 18 22:05 /dev/da0
$ gpt create /dev/da0
gpt create: error: bogus map
gpt create: unable to open device '/dev/da0': No such file or directory
$ dd if=/dev/zero of=/dev/da0 count=10
10+0 records in
10+0 records out
5120 bytes transferred in 0.307595 secs (16645 bytes/sec)

しかし、gpt で表示しようとしても、パーティションを作ろうとしても成功しない。ls や dd だと問題なく使えている。

さて、問題はパス名の指定の仕方だった。4G のディスクなので、size は 512 バイトのブロックで表される様だ。


$ gpt show da0
    start     size  index  contents
        0  8007552

/dev を省略しても動くようにしてあるコマンドは多い。しかし、/dev を付けると逆に動かない物は初めて見た。

さて、gpt でデバイスにアクセス出来たので初期化する。


$ gpt create da0
$ gpt show da0
    start     size  index  contents
        0        1         PMBR
        1        1         Pri GPT header
        2       32         Pri GPT table
       34  8007485
  8007519       32         Sec GPT table
  8007551        1         Sec GPT header
$ ls -lsd /dev/da0*
0 crw-r-----  1 root  operator    0, 144 Feb 18 22:29 /dev/da0

取り敢えず、何か出来た。しかし、da0 以下には何も作られていない。まだ、パーティションは無い状態だ。

およそ、3.8 G のパーティションを作る。


$ ls -lsd /dev/da0*
0 crw-r-----  1 root  operator    0, 144 Feb 18 22:29 /dev/da0
$ gpt add -s 7600000 da0
$ gpt show da0
    start     size  index  contents
        0        1         PMBR
        1        1         Pri GPT header
        2       32         Pri GPT table
       34  7600000      1  GPT part - FreeBSD UFS/UFS2
  7600034   407485
  8007519       32         Sec GPT table
  8007551        1         Sec GPT header
$ ls -lsd /dev/da0*
0 crw-r-----  1 root  operator    0, 144 Feb 18 22:31 /dev/da0
0 crw-r-----  1 root  operator    0, 150 Feb 18 22:05 /dev/da0p1

これが、da0p1 として作成された。

第二パーティションは、最後まで使いたい。今回は単純に add を実行する。


$ gpt add da0
$ gpt show da0
    start     size  index  contents
        0        1         PMBR
        1        1         Pri GPT header
        2       32         Pri GPT table
       34  7600000      1  GPT part - FreeBSD UFS/UFS2
  7600034   407485      2  GPT part - FreeBSD UFS/UFS2
  8007519       32         Sec GPT table
  8007551        1         Sec GPT header
$ ls -lsd /dev/da0*
0 crw-r-----  1 root  operator    0, 144 Feb 18 22:32 /dev/da0
0 crw-r-----  1 root  operator    0, 150 Feb 18 22:05 /dev/da0p1
0 crw-r-----  1 root  operator    0, 152 Feb 18 22:05 /dev/da0p2

しっかり、最後まで確保され、/dev/ad0p2 が出来た。

これをジャーナルを付けて利用する。


$ gjournal label /dev/da0p1 /dev/da0p2
$ newfs -i 1024 -J /dev/da0p1.journal
/dev/da0p1.journal: 3710.9MB (7599996 sectors) block size 16384, fragment size 2
048
        using 32 cylinder groups of 118.88MB, 7608 blks, 60864 inodes.
super-block backups (for fsck -b #) at:
 160, 243616, 487072, 730528, 973984, 1217440, 1460896, 1704352, 1947808,
 2191264, 2434720, 2678176, 2921632, 3165088, 3408544, 3652000, 3895456,
 4138912, 4382368, 4625824, 4869280, 5112736, 5356192, 5599648, 5843104,
 6086560, 6330016, 6573472, 6816928, 7060384, 7303840, 7547296
$ ls -lsd /dev/da0*
0 crw-r-----  1 root  operator    0, 144 Feb 18 22:32 /dev/da0
0 crw-r-----  1 root  operator    0, 150 Feb 18 22:34 /dev/da0p1
0 crw-r-----  1 root  operator    0, 148 Feb 18 22:34 /dev/da0p1.journal
0 crw-r-----  1 root  operator    0, 152 Feb 18 22:34 /dev/da0p2

実は、数 GB 程度の小さいデバイスには、gjounral は推奨されていない。このディスクは実験用なので、意図的に gjournal やその他の機能を試すのに使っている。

次回