NetBSDで3TBのHDDを扱う (gpt, dkctl)
3TBのHDDはNetBSDでどう扱えば良いのでしょうか?
Linuxのときに少し手間取ったので、何かあるなと思ってはいましたが、やっぱりいくつか失敗しながらなんとか使えるようになりました。少しまとめておきます。
まずは、こんな感じで見えてます。
partedはpkgsrc/wipにあり、これを使おうとmakeするとLinuxだけだよと怒られます。
じつはgptコマンドというそのものズバリのコマンドがあり、これを使えば良いというのを初めてしりました。
まずは、ディスクの状態を見てみます。
ということで一度クリアすることにしました。
gpt destroyで情報を消します。
man gptのEXAMPLEに近い状態になったので、いざ、先に進みます。
まずは区画を作ります。デフォルトだとFFSでディスク全体を区画にします。
今回はでかい区画が欲しいのでこれでよしとします。
ラベル名はgpt showに-lをつけると見えるようです。最初は空っぽ。
いつものようにdisklabelです。最初は空っぽ。
でも、おかしいですね。3TBにしては小さすぎます。
もしかしたらdisklabelでは3TBは扱えないのかも、とおもってmanを読むと、BUGSに
そういえば、gpt addしたときのコマンドの応答にそういうのがあったような...
まずは、umountします。
wedgenameはsd0a, typeはffsにしました。wedgenameは、少し考えて、ださいけどこうしました。
情報を見てみます。
まぁ、それほど見る機会もないだろうからnewfsしちゃいましょう。
Linuxのときに少し手間取ったので、何かあるなと思ってはいましたが、やっぱりいくつか失敗しながらなんとか使えるようになりました。少しまとめておきます。
まずは、こんな感じで見えてます。
root@zbox>dmesg | grep sd0 sd0 at scsibus0 target 0 lun 0: <I-O DATA, HDCA-U, 1337> disk fixed sd0: 2794 GB, 16383 cyl, 16 head, 63 sec, 512 bytes/sect x 5860533168 sectors大きなHDDはfdiskが使えないのでLinuxではpartedを使いました。
partedはpkgsrc/wipにあり、これを使おうとmakeするとLinuxだけだよと怒られます。
じつはgptコマンドというそのものズバリのコマンドがあり、これを使えば良いというのを初めてしりました。
まずは、ディスクの状態を見てみます。
root@zbox>gpt show sd0 start size index contents 0 1 PMBR 1 5860533134 5860533135 32 Sec GPT table 5860533167 1 Sec GPT headerなんか、セカンダリGPT table, headerしかない変な状態に見えます。
ということで一度クリアすることにしました。
gpt destroyで情報を消します。
root@zbox>gpt destroy sd0 root@zbox>gpt show sd0 start size index contents 0 1 PMBR 1 5860533167あらたにgpt createで区画を作ります。
root@zbox>gpt create sd0 root@zbox>gpt show sd0 start size index contents 0 1 PMBR 1 1 Pri GPT header 2 32 Pri GPT table 34 5860533101 5860533135 32 Sec GPT table 5860533167 1 Sec GPT headerちゃんとプライマリの情報とセカンダリの情報ができてます。区画情報を冗長化してるんですかね。
man gptのEXAMPLEに近い状態になったので、いざ、先に進みます。
まずは区画を作ります。デフォルトだとFFSでディスク全体を区画にします。
今回はでかい区画が欲しいのでこれでよしとします。
root@zbox>gpt add sd0 Partition added, use: dkctl sd0 addwedge <wedgename> 34 5860533101 <type> to create a wedge for it root@zbox>gpt show sd0 start size index contents 0 1 PMBR 1 1 Pri GPT header 2 32 Pri GPT table 34 5860533101 1 GPT part - NetBSD FFSv1/FFSv2 5860533135 32 Sec GPT table 5860533167 1 Sec GPT header区画にラベルをふってあげます。名前を付ける感じですね。
ラベル名はgpt showに-lをつけると見えるようです。最初は空っぽ。
root@zbox>gpt show -l sd0 start size index contents 0 1 PMBR 1 1 Pri GPT header 2 32 Pri GPT table 34 5860533101 1 GPT part - "" 5860533135 32 Sec GPT table 5860533167 1 Sec GPT headergpt labelに区画を指定する引数を与えて名前を付けます。今回はshareという名前にしました。
root@zbox>gpt label -i 1 -l share sd0 partition 1 on rsd0d labeled share root@zbox>gpt show -l sd0 start size index contents 0 1 PMBR 1 1 Pri GPT header 2 32 Pri GPT table 34 5860533101 1 GPT part - "share" 5860533135 32 Sec GPT table 5860533167 1 Sec GPT headerこれで区画ができたので使えるようにしましょう。
いつものようにdisklabelです。最初は空っぽ。
root@zbox>disklabel -r sd0 disklabel: could not read existing labeldisklabel -i -I sd0あたりでそれっぽいラベルを作ります。
root@zbox>disklabel sd0 # /dev/rsd0d: type: SCSI disk: HDCA-U label: fictitious flags: bytes/sector: 512 sectors/track: 63 tracks/cylinder: 16 sectors/cylinder: 1008 cylinders: 16383 total sectors: 1565565872 rpm: 3600 interleave: 1 trackskew: 0 cylinderskew: 0 headswitch: 0 # microseconds track-to-track seek: 0 # microseconds drivedata: 0 4 partitions: # size offset fstype [fsize bsize cpg/sgs] a: 1565565872 0 4.2BSD 0 0 0 # (Cyl. 0 - 1553140*) d: 1565565872 0 unused 0 0 # (Cyl. 0 - 1553140*)作ったらnewfsしてマウントです。newfsではrawデバイスを指定しないといけなかったですね。
root@zbox>newfs -O2 /dev/sd0a newfs: /dev/sd0a is a block device. use raw device root@zbox>newfs -O2 /dev/rsd0a /dev/rsd0a: 764436.5MB (1565565872 sectors) block size 16384, fragment size 2048 using 4133 cylinder groups of 184.98MB, 11839 blks, 22976 inodes. super-block backups (for fsck_ffs -b #) at: 160, 379008, 757856, 1136704, 1515552, 1894400, 2273248, 2652096, 3030944, 3409792, 3788640, 4167488, 4546336, 4925184, 5304032, 5682880, 6061728, 6440576, 6819424, 7198272, .................................................................................................................................................................................. root@zbox>mount /dev/sd0a /mnt root@zbox>df -k Filesystem 1K-blocks Used Avail %Cap Mounted on /dev/wd0a 77398560 20353514 53175118 27% / kernfs 1 1 0 100% /kern ptyfs 1 1 0 100% /dev/pts procfs 4 4 0 100% /proc /dev/sd0a 758910582 2 720965052 0% /mnt見事に使えるようになりました。
でも、おかしいですね。3TBにしては小さすぎます。
もしかしたらdisklabelでは3TBは扱えないのかも、とおもってmanを読むと、BUGSに
The disklabel structure stored on disk cannot support partitions/disks greater than 2TB. Please use gpt(8) and dkctl(8) to manage partitions and disks larger than 2TB.ありゃ、やっぱりそうでしたか。ここにあるgptは使ったけど、dkctlって何でしょう。
そういえば、gpt addしたときのコマンドの応答にそういうのがあったような...
root@zbox>gpt add sd0 Partition added, use: dkctl sd0 addwedge <wedgename> 34 5860533101 <type> to create a wedge for itおぉ、これです。もしかしたら、このコマンドで区画を有効化しなさいということなのかも。
まずは、umountします。
root@zbox>umount /mntさっきのコマンドに引数をいくつか与えて実行してみます。
wedgenameはsd0a, typeはffsにしました。wedgenameは、少し考えて、ださいけどこうしました。
root@zbox>dkctl sd0 addwedge sd0a 34 5860533101 ffs dk0 created successfully.どうやらdk0というのがfdiskでいうsd0aに相当するみたいですね。
情報を見てみます。
root@zbox>dkctl sd0 listwedges /dev/rsd0d: 1 wedge: dk0: sd0a, 5860533101 blocks at 34, type: ffsやっぱりwedgenameはshareとかにすべきでしたねー。
まぁ、それほど見る機会もないだろうからnewfsしちゃいましょう。
root@zbox>newfs -O2 dk0 /dev/rdk0: 2861588.4MB (5860533100 sectors) block size 16384, fragment size 2048 using 15470 cylinder groups of 184.98MB, 11839 blks, 22976 inodes. super-block backups (for fsck_ffs -b #) at: 160, 379008, 757856, 1136704, 1515552, 1894400, 2273248, 2652096, 3030944, 3409792, 3788640, 4167488, 4546336, 4925184, 5304032, 5682880, 6061728, 6440576, 6819424, 7198272, ..................................................................................................................................................................................いざ、mountです
root@zbox>mount /dev/dk0 /mnt root@zbox>df -g ilesystem 1G-blocks Used Avail %Cap Mounted on /dev/wd0a 73 19 50 27% / kernfs 0 0 0 100% /kern ptyfs 0 0 0 100% /dev/pts procfs 0 0 0 100% /proc /dev/dk0 2709 0 2573 0% /mntきましたね。ちゃんと2TB以上の領域として認識したみたいです。
- TB-URL http://www.tokuda.net/diary/0787/tb/
1: sage 2012年05月16日(水) 午後4時08分
gptパーティションの開始セクタは8の倍数にしたほうが良いかと(4kセクタ問題対策)
2: tokuda 2012年06月01日(金) 午前8時21分
そうでした。Webを見てみると8の倍数だと思った以上に差があるみたい。USBの先につながっているからあんまり効果なかったりするかもしれないけど。