SSDのパーティショニングとフォーマット
ページサイズ・ブロックサイズの確認
HDDと同じように、ページサイズに合わせてパーティショニングする必要がある。メーカーの製品情報からページサイズを調べてから、パーティショニングする。ところが、現在使っているCrucial m4 CT256M4SSD2のページサイズを調べてみたが、どこにも情報がなかった。また、最近のパーティショニングツールは、最適なセクターサイズでパーティショニングしてくれるらしいので、特にセクターサイズ等をいじらずパーティショニングすることにした。/sys/block/sdX/queue/physical_block_sizeから調べる方法もあるが、この値は当てにならないという情報も。参考程度に、メモしておく。
物理ブロックサイズを調べる。(Crucial m4 CT256M4SSD2の場合)
$ cat /sys/block/sdX/queue/physical_block_size 512
論理ブロックサイズを調べる。
$ cat /sys/block/sde/queue/logical_block_size 512
SSDのパーティショニング
例えば、fdiskやgdiskを使えばページサイズにあったパーティショニングを行ってくれるらしい。cdiskは使わないこと。GPTでパーティショニングしたほうが良いので、gdiskを使うのがベストだと思う。gdiskを使ったパーティショニングは以下のとおり。# gdisk /dev/sde 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.
SSDのフォーマット
SSDをフォーマットするときは、TRIMに対応したファイルシステム( Ext4, Btrfs, JFS, XFS)を使う。Ext4かXFSあたりがメジャーだと思う。例えば、XFSでフォーマットする場合は、以下のとおり。XFSもデフォルトで自動的に、セクターサイズ等を調整してくれるとのとこ。Wikiによると-m crc=1のオプションで停電時にファイルを壊れてもリカバリできるようになるっぽい。「SSSDの名前」は好きなように指定する。なくてもよい。# mkfs.xfs -m crc=1 -L "SSDの名前" /dev/sdX1
おそらく、ブートドライブをXFSにしてもブートできると思う。ただし、SELinuxを使う場合は、ブートの時にboot: linux xfs noselinux selinux=0と指定する必要があるらしい。
セクタサイズ等を確認する
XFSフォーマットのディスクのセクタサイズ等はxfs_infoで確認する。ちなみにext4はdumpe2fs /dev/sdXXで確認する。$ xfs_info /dev/sdXX
また、ページサイズにあったパーティショニングができているかは、blockdevで確認する。0が返ってこれば正しくパーティショニングできている。
# blockdev --getalignoff /dev/sdX 0
TRIMを設定する
SSDは使用していると、アクセス速度が遅くなる。できるだけ遅くならないように、Trim(discard)コマンドであらかじめ不要になった領域を定期的に集約する。いくつかの方法がある。systemdで定期的に行うのが一番手軽だと思う。systemdで定期的にfstrimを実行
util-linuxにfstrimのユニットが含まれているので、systemctlから有効にする。# systemctl enable fstrim.timer
このユニットで、週に一回fstrim.service(fstrim -a)を実行してくれる。実行の状況はjournalctlから確認する。
$ journalctl -u fstrim.timer
fstabのdiscardオプションを使う
fstabにdiscardオプションをつけることでもTRIMが実行される。ただし、このオプションだと小さいファイルが多い場合、時間がかかったり、間違って指定するとデータが消えたりするらしいので、注意が必要。あらかじめ、SSDがTRIM対応か調べる。# hdparm -I /dev/sda | grep TRIM * Data Set Management TRIM supported (limit 8 blocks) * Deterministic read data after TRIM
TRIM supportedと返ってこれば、TRIMに対応している。ファイルシステムがExt4, Btrfs, JFS, VFAT, XFS(swap)であればdiscardオプションに対応している。その他のファイルシステムでは使わないこと。
# vim /etc/fstab ... UUID=xxxx マウントポイント xfs defaults,noatime,discard 0 2 ...
参考:
[1]Solid State Drives
[2]systemd/Timers
スポンサーリンク
0 件のコメント:
コメントを投稿