はじめに
512GBのSSDと1TBのSSHDを取り付けたIntel NUC(NUC7i5BNH, 以下単に「NUC」と書きます。最新の製品はこちら)にFedora 27 Serverをインストールしてみました。OSのインストールが終わったら、次はデータを移動していきたいところですが、ファイルシステムの構成を考えているうちに春の大型連休後最初の週末を迎えてしまいました。
移行前のPC(AOpen MP67-D,以下単に「小型PC」と書きます。)では「速いストレージではXFS、遅いストレージではbtrfs(透過圧縮の設定入り)」としていたので、NUCも同様の構成でやろうと漠然と考えていた矢先、こんな情報を発見してしまいました。
btrfsは思い入れのあるファイルシステムというわけではないので、XFSに移行するのは特に構わないんですけど、btrfsの持っている機能のうち、特に透過圧縮についてはストレージの使用量の節約に役立っていると思われるので、圧縮機能のないXFSにデータを移動した際に使用量が増大してしまうことでストレージが満杯またはそれに近い状態になってしまうことだけは避けたいですし、残念ながらそうなってしまう場合には何らかの対策を考えなければなりません。
この記事では、XFSに移行する前にbtrfsを使用しているファイルシステムの状況を調べて、その後NUC上でLVM(Logical Volume Managerの略です。)上にXFSのファイルシステムをコマンドラインから作成していきましたので、その顛末について書いていきます。
btrfsを使用しているファイルシステムの状況を調べます。
移動元となる小型PCにおけるファイルシステムごとのストレージの使用量は以下の通りです。コマンドラインオプションの使い方がいまいち古くさいのは突っ込まない方向でお願いいたします。
ファイルシス 1K-ブロック 使用 使用可 使用% マウント位置
devtmpfs 4010192 0 4010192 0% /dev
tmpfs 4023948 0 4023948 0% /dev/shm
tmpfs 4023948 912 4023036 1% /run
tmpfs 4023948 0 4023948 0% /sys/fs/cgroup
/dev/mapper/fedora-root 52403200 30347404 22055796 58% /
tmpfs 4023948 4 4023944 1% /tmp
/dev/sda2 487652 160621 297335 36% /boot
/dev/sda1 204580 11132 193448 6% /boot/efi
/dev/mapper/fedora-home 173065664 100512204 72553460 59% /home
/dev/sdb1 1953512516 1420970180 462768860 76% /export
tmpfs 804788 0 804788 0% /run/user/1000
上記のうちbtrfsを使っている(かつ透過圧縮機能を使っている)のは/exportのみなんですけど、dfコマンドでは正確なストレージの使用量はわからないので、btrfsコマンドのサブコマンドを使って以下のように調べます。
Data, single: total=1.32TiB, used=1.31TiB
System, DUP: total=8.00MiB, used=168.00KiB
System, single: total=4.00MiB, used=0.00B
Metadata, DUP: total=37.75GiB, used=4.24GiB
Metadata, single: total=8.00MiB, used=0.00B
GlobalReserve, single: total=512.00MiB, used=0.00B
Dataの行のtotalが圧縮前の容量で、usedが圧縮後の容量(すなわち、実際にストレージに書き込まれている)容量になりますが…
( ゚д゚) ・・・
(つд⊂)ゴシゴシ
_, ._
(;゚ Д゚) …!?
全然圧縮されていないようです。
gzipやbzip2等の圧縮コマンドで圧縮されているファイルやフォーマット的にデータの圧縮が可能な動画や画像ファイルが多いですから致し方ないかもしれませんが、この機能を使う意味があまりなかったようです。
というわけなので、btrfsについては使わなくても良さそうです。
ただし、この/exportのあるストレージは2TBのHDD(Western Digital製)で、これ以外のストレージの容量はすべて1TB以下なので、この中に入っている1.3TBのデータを移動するのは工夫が必要そうです… と書こうと思っていた矢先、2年以上にわたって開けられていなかった引っ越しの荷物の中からHDDケースが発見され、その中から2TBの別のHDDが発掘されたので、データの移動に関する手間はそれほど必要としなくなる見込みとなりました。
XFSのファイルシステムを作成する前に、状況を把握します。
btrfsの使用状況についての調査が終わり、XFSに移行しても問題がなさそうだいうことがわかったので、NUCのM.2 NVMe SSD上にXFSのファイルシステムを作成していきます。
dfコマンドを実行します。
スポンサーリンク
まず、Fedora 27 Serverのインストール直後(厳密には直後ではないですが、「ほぼ」直後ということにしておいていただければ幸いです。)のNUCのディスクの使用状況をdfコマンドを使って調べます。
ファイルシス 1K-ブロック 使用 使用可 使用% マウント位置
devtmpfs 8145396 0 8145396 0% /dev
tmpfs 8159108 0 8159108 0% /dev/shm
tmpfs 8159108 1408 8157700 1% /run
tmpfs 8159108 0 8159108 0% /sys/fs/cgroup
/dev/mapper/fedora-root 15718400 1633504 14084896 11% /
tmpfs 8159108 8 8159100 1% /tmp
/dev/nvme0n1p1 999320 120280 810228 13% /boot
tmpfs 1631820 0 1631820 0% /run/user/1000
SSHDはOSのインストールの対象となるストレージに指定しなかったので、M.2 NVMe SSDのみがインストールの対象になりますが、NVMe上のファイルシステムのデバイス名はnvme0とかになるんですね。最近のストレージだと、sda1とかsdb1みたいな感じになることがほとんどなので、ちょっと新鮮です。
PVの確認。
まず最初にPV(Physical Volume)を確認します。pvdisplayコマンドで確認できます。
— Physical volume —
PV Name /dev/nvme0n1p2
VG Name fedora
PV Size <475.94 GiB / not usable 0
Allocatable yes
PE Size 4.00 MiB
Total PE 121840
Free PE 26392
Allocated PE 95448
PV UUID mWPakt-MwqB-Xkvr-pyob-XCJa-VeM7-llv3G8
上記の結果からVG(Volume Groupの略です。)名fedoraのVGには/dev/nvme0n1p2という名前のPVが1個だけ属していることがわかります。
VGの確認。
PVの次はVGを確認します。vgdisplayコマンドで確認できます。
— Volume group —
VG Name fedora
System ID
Format lvm2
Metadata Areas 1
Metadata Sequence No 3
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 2
Open LV 2
Max PV 0
Cur PV 1
Act PV 1
VG Size <475.94 GiB
PE Size 4.00 MiB
Total PE 121840
Alloc PE / Size 5848 / 22.84 GiB
Free PE / Size 115992 / 453.09 GiB
VG UUID 0b0odA-bdcC-wjSE-jXBo-3yjJ-NXDP-MeBJUt
上記の出力結果からVGの名前が”fedora”であり、VGですでに使用されているスペースが22.84GiBで残りが453.09GiBあることがわかります。これなら、/homeに350GiBくらい割り当てても問題なさそうです。最悪満杯になりそうになったら広げればいいですし。
LVの確認
VGの状況がわかったので、LV(Logical Volumeの略です。フランスのカバン屋さんの略ではありません。)の状況をlvdisplayコマンドを使って確認します。
— Logical volume —
LV Path /dev/fedora/swap
LV Name swap
VG Name fedora
LV UUID KB1f6n-Z3Cd-Ef8B-M95y-LFCA-fEky-Fy3Qkk
LV Write Access read/write
LV Creation host, time localhost, 2018-05-08 04:03:45 +0900
LV Status available
# open 2
LV Size 7.84 GiB
Current LE 2008
Segments 1
Allocation inherit
Read ahead sectors auto
– currently set to 256
Block device 253:1
— Logical volume —
LV Path /dev/fedora/root
LV Name root
VG Name fedora
LV UUID 3qOdEP-TzJW-GoZd-W5VH-8RV7-dHkm-BJNX8n
LV Write Access read/write
LV Creation host, time localhost, 2018-05-08 04:03:46 +0900
LV Status available
# open 1
LV Size 15.00 GiB
Current LE 3840
Segments 1
Allocation inherit
Read ahead sectors auto
– currently set to 256
Block device 253:0
上記の結果より、rootとswapというLV名のLVが作成されていて、それぞれに対して7.84GiB及び15.00GiBのストレージ容量がそれぞれ割り当てられていることがわかります。
XFSのファイルシステムの作成
ここまでの作業でNUCのストレージの状況が確認できましたので、XFSのファイルシステムを作成し、それを/homeという名前でマウントします。手順の概要は以下の通りです。
- LVの作成
- XFSのファイルシステムの作成
LVの作成(とりあえずlinear LV)
lvcreateコマンドを使用して”home”という名前のLVを”fedora”という名前のVGの下に作成します。
root権限で以下のコマンドを実行します。とりあえず、linear LVで作ります。
lvdisplayコマンドで作成されているかどうか確認します。
— Logical volume —
LV Path /dev/fedora/swap
LV Name swap
VG Name fedora
LV UUID KB1f6n-Z3Cd-Ef8B-M95y-LFCA-fEky-Fy3Qkk
LV Write Access read/write
LV Creation host, time localhost, 2018-05-08 04:03:45 +0900
LV Status available
# open 2
LV Size 7.84 GiB
Current LE 2008
Segments 1
Allocation inherit
Read ahead sectors auto
– currently set to 256
Block device 253:1
— Logical volume —
LV Path /dev/fedora/root
LV Name root
VG Name fedora
LV UUID 3qOdEP-TzJW-GoZd-W5VH-8RV7-dHkm-BJNX8n
LV Write Access read/write
LV Creation host, time localhost, 2018-05-08 04:03:46 +0900
LV Status available
# open 1
LV Size 15.00 GiB
Current LE 3840
Segments 1
Allocation inherit
Read ahead sectors auto
– currently set to 256
Block device 253:0
— Logical volume —
LV Path /dev/fedora/home
LV Name home
VG Name fedora
LV UUID Zpwx5v-NU1l-gF3Y-iMKp-DjyE-fbQb-BfG3se
LV Write Access read/write
LV Creation host, time nuc, 2018-05-13 13:46:16 +0900
LV Status available
# open 0
LV Size 350.00 GiB
Current LE 89600
Segments 1
Allocation inherit
Read ahead sectors auto
– currently set to 256
Block device 253:2
XFSのファイルシステムの作成
次に以下のコマンドを実行し、XFSのファイルシステムを前項で作成したLV上に作成します。なお、device nameには”LV Path”に表示されている文字列をそのまま指定します。なお、コマンドラインにdevice nameのみを指定して実行すると、LVの領域がすべてXFSのファイルシステムの作成のために使用されます。
meta-data=/dev/fedora/home isize=512 agcount=4, agsize=22937600 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=1, sparse=0, rmapbt=0, reflink=0
data = bsize=4096 blocks=91750400, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=1
log =internal log bsize=4096 blocks=44800, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
作成したXFSのファイルシステムをマウントする。
前項で作成したXFSのファイルシステムをマウントします。なお、マウントの前に動作確認をします。
マウントポイント予定地の確認。
新たに作成したファイルシステムのマウントポイントとなる予定の/homeディレクトリはFedora 27 Serverのインストール時にすでに作成されていますので、root権限で以下のコマンドを実行し、既存の/homeディレクトリのディレクトリ名を変えつつ、新しく内容が空の/homeディレクトリを作成しておきます。
[root@pandanote.info ~]# mkdir /home
コマンドを使ったマウント。
以下の手順でマウントができることを確認します。
- 以下のコマンドを実行し、新たに作成したファイルシステムのUUIDを確認します。なおgrepコマンドにはLV Pathの少なくとも一部を指定します。
[root@pandanote.info ~]# blkid | grep home
/dev/mapper/fedora-home: UUID=”86527101-a8a3-455f-9cf6-fc45a7fe07f8″ TYPE=”xfs” - 以下のコマンドを実行し、ファイルシステムをマウントします。
[root@pandanote.info ~]# mount -t xfs UUID=”86527101-a8a3-455f-9cf6-fc45a7fe07f8″ /home
- dfコマンドを実行し、マウントされていることと、ファイルシステムの容量を確認します。
[root@pandanote.info ~]# df -k
ファイルシス 1K-ブロック 使用 使用可 使用% マウント位置
devtmpfs 8145396 0 8145396 0% /dev
tmpfs 8159108 0 8159108 0% /dev/shm
tmpfs 8159108 1416 8157692 1% /run
tmpfs 8159108 0 8159108 0% /sys/fs/cgroup
/dev/mapper/fedora-root 15718400 1633704 14084696 11% /
tmpfs 8159108 4 8159104 1% /tmp
/dev/nvme0n1p1 999320 120280 810228 13% /boot
tmpfs 1631820 0 1631820 0% /run/user/0
/dev/mapper/fedora-home 366822400 398560 366423840 1% /home - 以下のコマンドを実行し、/homeのマウントをいったん解除します。
[root@pandanote.info ~]# umount /home
起動時に自動的にマウントするように設定する。
以下の手順で、起動時に自動的にマウントするように設定します。
- vi等の適当なエディタを用いて、/etc/fstabに以下の行を追加し、保存します。
UUID=”86527101-a8a3-455f-9cf6-fc45a7fe07f8″ /home xfs defaults 0 0
- root権限で以下のコマンドを実行し、/etc/fstabの記述に基づいてマウントが実行されることを確認します。
[root@pandanote.info ~]# mount -a
- dfコマンドの実行結果または/etc/mtabファイルの内容を確認することにより、マウントが実行されていることを確認します。
- NUCを再起動して、マウントがエラーなく実行されることを確認します。
まとめ
ここまでNUCへのデータ移動並びにLV及びXFSのファイルシステムの作成手順についてのメモ書きを書いてきました。
btrfsを使い始める時に定期的にスナップショットを取るように設定したところ取得する頻度が高すぎて、ファイルシステムの容量オーバーとなってしまったこと以外ではbtrfsの大きな不具合に遭遇したことはありませんでした(スナップショットの取得はやめることで回避しました)。
でも、Google先生に聞いてみると、btrfsはファイルシステムが壊れてしまうことが割とあるようでしたので、今までデータの破損などの問題に遭遇しなかったのは、もしかすると幸運なことだったのかもしれません。スナップショットを使いたければlvcreateコマンドで作れそうですしね。
…と、フラグが立つようなことを書いてしまったような気もするので、さっさとデータを移動させたいと思います。
この記事は以上です。