web-dev-qa-db-ja.com

fstrimがlvmとdm-cryptを使用するパーティションをトリムしていないようです

Fedora 25をdm-cryptとLVMでセットアップしようとしていますが、TRIMを機能させるのに苦労しています。

$ Sudo fstrim -av                                                                            
/boot: 28.6 MiB (30003200 bytes) trimmed
/: 56.5 GiB (60672704512 bytes) trimmed

$ Sudo fstrim -av                                                                            
/boot: 0 B (0 bytes) trimmed
/: 56.5 GiB (60671877120 bytes) trimmed

上記の出力からわかるように、fstrimを繰り返し実行すると、暗号化されていないext4/bootで機能しますが、 /(同じディスク上)への影響。

セットアップはSSD-> dm-crypt-> LVM-> XFSです。

$ lsblk -D                                                                                                                                                                                     
NAME                                          DISC-ALN DISC-GRAN DISC-MAX DISC-ZERO
sda                                                  0      512B       2G         0
├─sda2                                               0      512B       2G         0
│ └─luks-dd5ce54a-34c9-540c-a4cf-2a712b8a3a5e        0      512B       2G         0
│   └─Fedora-root                                    0      512B       2G         0
└─sda1                                               0      512B       2G         0

this の質問によると、DISC-ZERO == 0は問題ではないはずです

# cat /etc/crypttab
luks-dd... UUID=dd.. none discard

# cat /etc/lvm/lvm.conf
devices {
...
     issue_discards = 1
...
}

rd.luks.options=discard/etc/default/grubオプションを追加し、initramfsとgrub.cfgを更新しました:

# grub2-mkconfig -o /boot/grub2/grub.cfg
# dracut -f

破棄オプションは正しく反映されました:

# dmsetup table luks-d...                                                                                                                        
0 233385984 crypt aes-xts-plain64 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 0 8:2 4096 1 allow_discards

私はウェブ上で見つけることができる上記のセットアップのバリエーションを試しましたが、これはマニュアルページに従っているようです。私が試していないのは別のファイルシステムを使用することでしたが、XFSがサポートされているはずです。

8

テストはドキュメントと一致しないと思います(man fstrim)。

-v、-verbose

詳細な実行。このオプションを使用すると、fstrimはファイルシステムからブロックスタックを介してデバイスに渡されたバイト数を出力し、破棄される可能性があります。繰り返し呼び出されるFITRIM ioctlは同じセクターを繰り返し送信して破棄するため、この数はストレージデバイスの観点からの最大破棄量です。

fstrimは毎回同じ潜在的な破棄バイトを報告しますですが、破棄の間に書き込まれたセクターのみが実際にストレージデバイスによって破棄されます。さらに、カーネルブロックレイヤーは、RAIDストライプジオメトリ、LVMセットアップの非トリム対応デバイスなどに適合するように破棄範囲を調整する権利を留保します。これらの削減は、fstrim_range.len(--lengthオプション)には反映されません。

代わりにblktraceを使用して、つまりfstrimの実行と同時に破棄要求を探すことをお勧めします。うまくいけば、スタックの一番下にあるブロックデバイスに破棄要求が送信されているかどうかが表示されます。 sda1とsda2の結果を比較できます(新規ブート後、文書化されていないsda1での動作を回避するため)。

btrace -a discard $DEV
5
sourcejedi