表題のまんま。HDDだと遅いので、SSDキャッシュを載せて高速化を図ろうっていう。
- それぞれをフォーマット。
- LVMのissue_discardsを1に変更
- 初期 RAM ファイルシステムイメージの再構築
- フィジカルボリューム(PV)の作成
- ボリュームグループ(VG)の作成
- ロジカルボリューム(LV)の作成
- キャッシュプールの作成
- HDDとキャッシュプールを紐付ける
- オチ
ssdキャッシュを構築するためにdm-cacheを構築する。
参考サイトは
dm-cacheの技術概要と構築手順 #Linux - Qiita
テスト環境は大容量HDDとしてHDD(/dev/sdd1)、SSD(/dev/nvme0n1)の構成。
SSDは4TBのSN850を使用。
それぞれをフォーマット。
HDDのほう
parted /dev/sdd
p
mklabel gpt
mkpart mainhdd xfs 1 -1
p
qmkfs.xfs /dev/sdd1
SSDのほう
parted /dev/nvme0n1
p
mklabel gpt
mkpart cachessd xfs 1 -1
p
qmkfs.xfs /dev/nvme0n1p1
LVMのissue_discardsを1に変更
を見たけど理解出来ない・・・どういうこと・・・。
vi /etc/lvm/lvm.conf
#issue_discards = 0
#がコメントアウトされているので、まあその付近でコメントアウトを外してかコピーして
issue_discards = 1
初期 RAM ファイルシステムイメージの再構築
dracut -f
sync
再起動
reboot
フィジカルボリューム(PV)の作成
pvcreate /dev/sdd1
WARNING: xfs signature detected on /dev/sdd1 at offset 0. wipe it?[y/n]という警告が出るがyで通す
同じように
pvcreate /dev/nvme0n0p1
これも警告が出るけどyで。
確認は
pvdisplay
再起動したりするとsdXが変わってしまうことがあるので、pvdisplayで確認した方が良い。
ボリュームグループ(VG)の作成
HDDとSSDを大きなボリュームとしてまとめる。
vgcreate hybrid_vg0 /dev/sdd1 /dev/nvme0n0p1
ロジカルボリューム(LV)の作成
HDDの方をlv0として全て割り当てる。
lvcreate -l 100%FREE -n lv0 hyvrid_vg0 /dev/sdd1
SSDの方は、全SSD(キャッシュ)容量の1%をメタデータとして割り当てる。
pvdisplayで<3.64tibとなっていたので、
3TBをキャッシュ、300GBをメタデータとすることにする。
lvcreate -L 300G -n cache_meta hybrid_vg0 /dev/nvme0n1p1
※これはエラーが出るので下で再作成
lvcreate -L 3T -n cache hybrid_vg0 /dev/nvme0n1p1
オプションは
【 lvcreate 】コマンド――論理ボリュームを作成する:Linux基本コマンドTips(337) - @IT
-lはエクステント(パーセンテージ)、-Lはサイズ(GやT)で容量を表す。
-nは名前。
キャッシュプールの作成
lvconvert --type cache-pool --cachemode writeback --poolmetadata /dev/hybrid_vg0/cache_meta --chunksize 256 /dev/hybrid_vg0/cache
ここでエラー。
300GBのメタデータは仕様外(16GBまでだって)いうエラーが出たので、一旦LVを削除して作り直す。
あとチャンクサイズも3TBにしてはおかしいんじゃあと言われる。
【 lvremove 】コマンド――論理ボリュームを削除する:Linux基本コマンドTips(340) - @IT
lvremove -A n hybrid_vg0
何か全般的に消そうとするので、meta_cacheのみyであとはnにする。
再度作成
lvcreate -L 16G -n cache_meta hybrid_vg0 /dev/nvme0n1p1
再度チャンクサイズを抜いてキャッシュプールの作成
lvconvert --type cache-pool --cachemode writeback --poolmetadata /dev/hybrid_vg0/cache_meta /dev/hybrid_vg0/cache
1000000チャンクしか無理よ、全部ぶっ壊れるぞと警告が出るが、そんなことを言われてもという話なので、
yを押下。
暫く後プロンプトが復帰して終了。
HDDとキャッシュプールを紐付ける
lvconvert --type cache --cachepool /dev/hybrid_vg0/cache /dev/hybrid_vg0/lv0
metadata消して以下言われるのでy
押下すると今からキャッシュするわと言われて終了。
確認
lvs -a hybrid_vg0
フォーマット
lvはパーティションを切ったりしなくても良いのでそのままフォーマット。
mkfs.xfs /dev/hybrid_vg0/lv0
blkidでUUIDを出してからfstabに記述すれば、マウントまで出来て終了。
キャッシュプールの取り外し
キャッシュプールが壊れたりするかもしれないので。
lvconvert --splitcache hybrid_vg0/lv0
あー、HDDの方を指定するのね。
こいつに対しては全部ナシ、みたいな。
再度有効にする場合は、前回同様同じように紐付ける。
lvconvert --type cache --cachepool /dev/hybrid_vg0/cache /dev/hybrid_vg0/lv0
なるほどね。
オチ
話にはオチがあって、なんとRAIDカードが優秀(Megaraid9460)らしく、ネットワーク越しに送信すると、ネットワーク帯域ギリギリ(10Gbps)でファイル転送出来てしまい、ファイルサーバにキャッシュを載せてSSD速度でボトルネックを解消しようプレイはお預けになったとさ。
広告はCrucialのT500。1TB1万2000円程度とかなりこなれてきたので、キャッシュ付きSSDとしてお勧めしたい。