2015年1月11日日曜日

HDDを新たに追加 | GPTパーティショニング, XFSフォーマット, 4KiBセクタ, Advanced Format Technology

Extフォーマットのエントリは書いていたが、最近メジャーなディストリビューションでXFSフォーマットが流行っているので、試してみた。いずれは、ブートドライブもXFSフォーマットに移行したい。ただ、Arch WikiのXFSのページが短く情報量が少ないのが、若干心配。

あと、今までHDDのセクターサイズとか意識せずにパーティショニングとかしていたので、セクターサイズに合ったパーティショニングができているかきちんと確認する意味も込めてやってみた。

HDDのつなぎ変え
あらかじめ使っていたHDDを外して、新しいHDDにつなぎ替えるときは、fstabで外すHDDの設定をコメントアウトしておく。
# vim /etc/fstab

...
# UUID=xxxx... ←#をつけて、コメントアウトしておく。
...

もしコメントアウトし忘れると、OSがGUIモードで立ち上がらない。この時は、rootでログインして、fstabを編集、rebootでOSを立ち上げることになる。ことになるというか、忘れていたので、CUIでfstabを編集することになった。

OSをシャットダウンして、新たに追加したいHDDを繋いで、PCを起動する。新しく繋いだHDDのデバイスファイル名を確認する。デバイスファイルに存在していて、mountで表示されないのが新しく繋いだHDDのデバイスファイル名ということになる。以下の例では、sdeが新しいHDD。
$ ls -l /dev/ | grep sd

...
brw-rw----  1 root disk        8,  48 12月 22 22:06 sdd
brw-rw----  1 root disk        8,  49 12月 22 22:06 sdd1
brw-rw----  1 root disk        8,  64 12月 22 22:06 sde
...

マウントされているデバイスを確認。
$ mount | grep sd

...
/dev/sdd1 on /home/username/Disk/3TB-5 type xfs (rw,relatime,attr2,inode64,noquota)
/dev/sdb1 on /home/username/Disk/3TB-1 type xfs (rw,relatime,attr2,inode64,noquota)
...

以下で、フォーマットすることになるので、フォーマットすべきHDDのデバイスファイル名を間違えないこと。

HDDのセクターサイズを確認する
メーカーの製品情報からセクターサイズ(ブロックサイズ)を確認する。今回パーティショニングするST3000DM001のセクターサイズは4096byteであった。新しいHDDでは4KiBセクタ( Advanced Format Technology, AFT)がメジャーだと思う。 古いHDDについては、メーカサイト等で調べる。



/sys/block/sdX/queue/physical_block_sizeから調べる方法もあるが、この値は当てにならないという情報も。参考程度に、メモしておく。

物理ブロックサイズを調べる。ST3000DM001の場合、正しい値が返ってきた。
$ cat /sys/block/sdX/queue/physical_block_size
4096


HDDをパーティショニングする
4KiBセクターのHDDをパーティショニングするときは、gdiskとかを使うのが良い。cdiskだとセクターサイズに合ったフォーマットを自動でしてくれないので、使わない。色々調べてみたが、セクターサイズとか確認しなくても、とりあえず、gdiskを使っておけば問題ないという結論に至った。

gdiskはデフォルトでインストールされていないので、pacmanからインストールする。
# pacman -S gptfdisk
resolving dependencies...
looking for conflicting packages...

Packages (1) gptfdisk-1.0.1-2

Total Download Size:   0.16 MiB
Total Installed Size:  0.67 MiB

:: Proceed with installation? [Y/n] y
:: Retrieving packages ...
 gptfdisk-1.0.1-2-x86_64                   161.9 KiB  1316K/s 00:00 [#####################################] 100%
(1/1) checking keys in keyring                                      [#####################################] 100%
(1/1) checking package integrity                                    [#####################################] 100%
(1/1) loading package files                                         [#####################################] 100%
(1/1) checking for file conflicts                                   [#####################################] 100%
(1/1) checking available disk space                                 [#####################################] 100%
(1/1) installing gptfdisk                                           [#####################################] 100%


# gdisk /dev/sdX

GPT fdisk (gdisk) version 0.8.10
 
Partition table scan:
  MBR: not present
  BSD: not present
  APM: not present
  GPT: not present
 
Creating new GPT entries.
 
Command (? for help): o(新しくGPTパーティションテーブルを作る)
This option deletes all partitions and creates a new protective MBR.
Proceed? (Y/N): Y
 
Command (? for help): n(パーティションテーブルに新しいパーティションを追加)
Partition number (1-128, default 1): 1
First sector (34-5860533134, default = 2048) or {+-}size{KMGTP}: (デフォルトでの値を使うので、何も入力せずエンター)
Last sector (2048-5860533134, default = 5860533134) or {+-}size{KMGTP}: (デフォルトでの値を使うので、何も入力せずエンター)
Current type is 'Linux filesystem'
Hex code or GUID (L to show codes, Enter = 8300): (デフォルトでの値を使うので、何も入力せずエンター)
Changed type of partition to 'Linux filesystem'
 
Command (? for help): w(ディスクにパーティションテーブルを書き込み)
 
Final checks complete. About to write GPT data. THIS WILL OVERWRITE EXISTING
PARTITIONS!!
 
Do you want to proceed? (Y/N): Y
OK; writing new GUID partition table (GPT) to /dev/sdX.
The operation has completed successfully.


HDDをフォーマットする
mkfs.xfsでHDDをフォーマットする。mkfs.xfsはデフォルトで自動的に、セクターサイズ等を調整してくれるとのとこ。Wikiによると-m crc=1は、停電時にファイルを壊れてもリカバリできるようになるっぽいオプション。「HDDの名前」は好きなように指定する。なくてもよい。もし、以前に使っていたフォマット済みのHDDであったら、-fオプションを付ける。
# mkfs.xfs -m crc=1 -L "HDDの名前" /dev/sdX1

meta-data=/dev/sde1              isize=512    agcount=4, agsize=183141597 blks
         =                       sectsz=4096  attr=2, projid32bit=1
         =                       crc=1        finobt=1, sparse=0
data     =                       bsize=4096   blocks=732566385, imaxpct=5
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
log      =internal log           bsize=4096   blocks=357698, version=2
         =                       sectsz=4096  sunit=1 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0


HDDをfstabに追加
フォーマットまで終わったら、fstabに追加する。とりあえず、マウントポイントのディレクトリを作成する。自分の環境では、/home/username/Disk/というディレクトリにアーカイブ用のディレクトリを作成している。
$ mkdir /home/username/Disk/hoge

HDDのuuidを調べる。
$ ls -l /dev/disk/by-uuid

total 0
...
lrwxrwxrwx 1 root root 10  1月 11 18:16 xxxx -> ../../sdX1
...

調べたUUID(xxxx)を使って、fstabに追加する。
# vim /etc/fstab

...
UUID=xxxx       /home/zero/Disk/3TB-5   xfs     defaults        0 2
...

ちなみに、fstabのフィールドの意味は以下のとおり。

フィールド番号 説明
1 マウント対象となるデバイス名、あるいはラベル名
2 マウントポイントとなるディレクトリ
3 ファイルシステムタイプ
4 マウント時のオプション
5 0: dumpコマンドの非対象
1: dumpコマンドの対象
6 0: boot時fsck対象外
1: rootファイルシステム
2: boot時fsck対象


最後に、mount -aでマウントする。
# mount -a


マウントポイントのディレクトリの所有者変更
このままだと、以下のようにマウントしてもマウントポイントディレクトリの所有者と所有グループがrootになったままで、一般ユーザーから書き込めない。
$ ls -ld マウントポイントのディレクトリ
drwxr-xr-x  2 root root     6  1月 11 14:41 マウントポイント

chown、chgrpして一般ユーザーで書き込めるようにする。chgrpはusersが一般的だと思う。
# chown ユーザー名 マウントポイントのディレクトリ
# chgrp users マウントポイントのディレクトリ

lsで確認。
$ ls -ld マウントポイントのディレクトリ
drwxr-xr-x  2 ユーザー名 users    6  1月 11 14:41 マウントポイント


HDDのセクターサイズ等を確認する
XFSフォーマットのディスクのセクタサイズ等はxfs_infoで確認する。xfs_infoは、マウントしたドライブに対してしか実行できない。ちなみにext4はdumpe2fs /dev/sdXXで確認する。ちゃんとsectsz=4096、bsize=4096となっていることが分かる。
$ xfs_info /dev/sdXX

meta-data=/dev/sde1              isize=512    agcount=4, agsize=183141597 blks
         =                       sectsz=4096  attr=2, projid32bit=1
         =                       crc=1        finobt=0
data     =                       bsize=4096   blocks=732566385, imaxpct=5
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
log      =internal               bsize=4096   blocks=357698, version=2
         =                       sectsz=4096  sunit=1 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0

また、セクタサイズにあったパーティショニングができているかは、blockdevでも確認できる。0が返ってこれば正しくパーティショニングできている。
# blockdev --getalignoff /dev/sdX
0



参考:
[1]XFS
[2]Partitioning
[3]4 KB セクター・ディスクで Linux を使用する: 実用的なアドバイス

スポンサーリンク

スポンサーリンク

0 件のコメント:

コメントを投稿