私の問題は次のとおりです。
VPSのUbuntu 22.04でLXDスナップバージョンを含むLinuxコンテナを実行しています。 VPSのルートファイルシステムはExt4であり、追加のリポジトリが接続されていません。したがって、デフォルトのLXDストレージプールは次のように構成されます。目次オプション。
これらのLXCのスナップショットを撮ると、データ全体がコピーされます。つまり、コンテナが6Gの場合、スナップショットは別の6Gになります。
LVMファイルシステムでは、スナップショットが異なるように作成されると思います。
だから私の質問は次のようになります
fallocate -l 16G /lvm.fs
同様の作業を行った後、LVMでフォーマットしてマウントしてLXD用のストレージプールとして使用できますか?もちろん、それが可能であればどうすればよいですか?
いくつかの注意:
@larsksが提供するソリューションは期待どおりに機能します!後で追加のオプションやパラメータなしで使用してもlxc storage create pool-name lvm
ほぼ同じように機能することがわかりました。lvm
ドライバは別のパーティションを強制的に設定したと思ったので、質問を投稿する前にテストしませんでした。
しかし、私の考えでは、どちらの場合も、このアプローチはスコアよりも多くのスレッドがあります。たとえば、次のようになります。
ドライバを使用する場合よりも書き込み速度が約10%程度低下しました
dir
。残りのスペースがないため、回復が困難な状況ディスク、オーバーロードされたデータが配置されていても
/tmp
...一方dir
、ドライバを使用すると、LXDはホスト全体のファイルシステム領域が消費されないようにするため、システムとコンテナが引き続き実行される可能性があります。これは私のVPSケースに非常に便利です。
答え1
fallocate -l 16G /lvm.fsのような操作を実行してからLVMでフォーマットしてマウントした後、LXD用のストレージプールとして使用できますか?もちろん、可能であればどうすればよいですか?
文書の作成から始めてください。私はこのディレクトリ以外のディレクトリに置きたいので、次のようなディレクトリを作成しました/
。/vol
truncate -s 16G /vol/pv0
(@LustreOneがコメントで指摘したように、ファイルにブロックを事前に割り当てるのtruncate
ではなく、ゼロバイトを使用して起動して書き込むのに十分なディスク容量しか消費しません。)fallocate
次のコマンドを使用して、ファイルをブロックデバイスとして設定しますlosetup
。
losetup -fnP --show /vol/pv0
これにより、ループデバイスの名前が出力されます(おそらく/dev/loop0
それでもそうでない場合は、一致するように次のコマンドを調整します)。
このデバイスにLVMを設定します。
pvcreate /dev/loop0
vgcreate vg0 /dev/loop0
lvcreate ...
おめでとうございます。ファイル認識LVM VGを持つようになりました!
残念ながら、この時点で再起動すると、VGが欠落していることがわかります。ループデバイスは永続的ではないため、システム起動時にそれを設定するためのいくつかのツールを追加する必要があります。
次の内容を入れてください/usr/local/bin/activate-vg.sh
。
#!/bin/sh
losetup -fnP /vol/pv0
vgchange -ay
そして実行可能であることを確認してください。
chmod a+x /usr/local/bin/activate-vg.sh
サービスを有効にするには、システムユニットを追加してください。次の内容を入れてください/etc/systemd/system/activate-vg.service
。
[Unit]
DefaultDependencies=no
Requires=local-fs.target local-fs-pre.target
After=local-fs-pre.target
Before=local-fs.target
[Service]
Type=oneshot
ExecStart=/usr/local/bin/activate-vg.sh
[Install]
WantedBy=local-fs.target
サービスを有効にします。
systemctl enable activate-vg
再起動すると、ファイルでサポートされているLVM VGを使用できるようになります。