現在、ディスクレス ブート用に SAN を設定しています。バックエンドは、iSCSI 経由で共有される ZFS-Vol で構成されています。これまでのところ、TRIM/UNMAP を除いてすべて正常に動作しています。テスト目的で、VirtualBox で Ubuntu20.04 を実行する 2 つの VM を、静的 IPv4 アドレスを持つ内部ネットワーク経由でネットワーク化しました。ターゲット (tgt) には、ZFS でフォーマットされた 2 番目の仮想ドライブがあります。この zpool で、zVol を作成し、GPT と ext4 でフォーマットしました。
/etc/tgt/conf.d/iscsi.conf
<target example.com:lun1>
<backing-store /dev/zvol/tank/iscsi_share>
params thin_provisioning=1
</backing-store>
initiator-address 192.168.0.2
</target>
イニシエーター (open-iscsi) では、次のコマンドを使用して TRIM 操作を開始します。
sudo mount /dev/sdb1 /iscsi-share
sudo dd if=/dev/zero of=/iscsi-share/zero bs=1M count=512
sudo rm /iscsi-share/zero
sudo fstrim /iscsi-share
しかし、シェルは「fstrim: /iscsi-share: 破棄オプションはサポートされていません」と応答します。ターゲット マシンでこれらのコマンドを発行すると、zVol の「REFER」プロパティが予想どおりに減少します。
ウェブで検索しても何も見つからなかったので、なぜこれが機能しないのか、そもそもこれが可能なのかどうかについてのヒントは見つかりませんでした。
編集:オプションを使用するようにアドバイスを受けたのでシンプロビジョニング。
ドライブを再パーティションしてイニシエーターにマウントした後、blk_update_request: critical target error, dev sdb, sector 23784 op 0x9:(WRITE_ZEROES) flags 0x800 phys_seg 0 prio class 0
いくつかのセクターでエラーメッセージが表示され、テストファイルを作成して削除した後、fstrim
メッセージを送信します
blk_update_request: I/O error, dev sdb, sector 68968 op 0x3:(DISCARD) flags 0x800 phys_seg 1 prio class 0
fstrim: iscsi-share: FITRIM ioctl failed: Input/output error
編集:回答に言及しているものがあったのでリオ今度は targetcli も試してみました。そこで、/backstores/block/iscsi の下に zVol でターゲットを設定しましたset attribute emultate_tpu=1
。これをイニシエータにインポートした後、パーティションを再設定し、フォーマットして、イニシエータにマウントしました。次に、テスト ファイルを作成し、それを削除してコマンドを発行したところfstrim
、うまくいきました。ご協力ありがとうございました。
答え1
LIO はデフォルトで UNMAP を無効にします。有効にしたい場合は、emulate_tpu
ターゲットに属性を設定する必要があります。
答え2
あなたが尋ねているのは、iSCSI ターゲットの実装に非常に特有なことです。それらのほとんどは 1:1 SCSI コマンド マッピングを行わないため、iSCSI ターゲットがハード ディスクをエミュレートする場合、iSCSI ターゲットに明示的にそうするように要求しない限り、認識されないコマンド (もちろん UNMAP を含む) をバックエンドの基礎となるストレージにバイパスしません。TGT では、構成ファイルで仮想 LUN に "thin_provisioning=1" を指定することを意味していました。
答え3
Ubuntu 20.04 では TRIM がデフォルトで毎週実行されるように有効になっているため、手動で実行しても問題はありません。念のため、fstrim.service と fstrim.timer でこれを確認できます。https://askubuntu.com/questions/1034169/is-trim-enabled-on-my-ubuntu-18-04-installation
ただし、すでに述べたように、ターゲットで UNMAP を有効にする必要があるようです。多くの SATA SSD で UNMAP に問題があったため、LIO ではデフォルトで無効になっています。http://www.linux-iscsi.org/Doc/LIO%20Admin%20Manual.pdf。
ちなみに、もちろん、iSCSI ターゲットが TRIM/UNMAP をネイティブにサポートしていれば、それ以上の調整は不要で、作業はずっと簡単になります。次に例を示します。https://forums.starwindsoftware.com/viewtopic.php?f=5&t=5343