LXCストレージプールの容量が不足しているため、本番コンテナがクラッシュしました。
ここは dh -h
コンテナ内から:
Filesystem Size Used Avail Use% Mounted on
/dev/loop0 82G 78G 2.0G 98% /
ここでは、ホストシステムからの同じマウント:
/dev/loop0 82G 78G 2.0G 98% /var/lib/lxd/storage-pools/default
1年前にこれを設定したとき、なじみのないもので80GBで十分かと聞かれましたが、「コンテナのディスクサイズ」とは書かれておらず、他のことを言っていたので、デフォルトを信頼したほうがいいと思いました。オプション。これで、isディスク容量の制限であることがわかりました。どうすればこの制限を今すぐ増やすことができますか?
現時点では、緊急にスペースを掃除しました。ホストマシンには、実際にはテラバイトのディスク容量があります。
P.S.不満を言って申し訳ありませんが、LXCのドキュメントは私が今まで見た中で最悪のものの1つです。私のようなユーザーにとっては意味がありません。
P.P.S.実際にLXDを使っているのを忘れてしまいました。何かをするためにlxc
と入力したという事実は、私を混乱させました。
PDATE:直感的に、このコマンドでストレージプールのサイズを変更できると思いました。
# lxc storage set default size 200GB
しかし、それは失敗します:
Error: The [size] properties cannot be changed for "btrfs" storage pools
何か案は?
バージョン3.17の時点で、LXDにはBtrfsファイルでバックアップされたストレージプールのサイズを変更する組み込みの方法がありませんが、これが私が作成した回避策です。
必要に応じて、default
をストレージボリュームの名前に置き換え、100G
新しい希望のサイズ:
grow_lxd_btrfs_file() { STORAGE_POOL="$1" ; NEW_SIZE="$2" ; STORAGE_POOL_SOURCE="$(lxc storage get "$STORAGE_POOL" source)" ; Sudo truncate -s "$NEW_SIZE" "$STORAGE_POOL_SOURCE" ; STORAGE_POOL_LOOP_DEVICE="$(losetup -j "$STORAGE_POOL_SOURCE" | awk -F': ' '{print $1}' | head -1)" ; Sudo losetup -c "$STORAGE_POOL_LOOP_DEVICE" ; LXD_PID=$(pgrep lxd | head -1) ; NS_MOUNT_POINT=$(Sudo nsenter -t "$LXD_PID" -m -- findmnt -no target "$STORAGE_POOL_LOOP_DEVICE") ; Sudo btrfs filesystem resize max "/proc/$LXD_PID/root/$NS_MOUNT_POINT" ; lxd sql global "UPDATE storage_pools_config SET value = '$NEW_SIZE' WHERE key = 'size' AND storage_pool_id IN (SELECT id FROM storage_pools WHERE name = '$STORAGE_POOL')" ; } \
grow_lxd_btrfs_file default 100G
変数を設定します$STORAGE_POOL
ストレージプールの名前に。あなたの場合、それはdefault
です:
STORAGE_POOL=default
変数を設定します$NEW_SIZE
ストレージプールを希望するサイズに変更します。
NEW_SIZE=100G
値は整数でオプションの単位です(例:10Kは10 * 1024です)。単位は、K、M、G、T、P、E、Z、Y(1024の累乗)またはKB、MB、...(1000の累乗)です。
重要:新しいサイズは、現在のBtrfsファイルシステムのサイズよりも大きくする必要があります。サイズが小さい場合、ストレージプール内のすべてのデータが失われます。
ホストで、Btrfsストレージプールファイルへのパスを見つけます。
STORAGE_POOL_SOURCE="$(lxc storage get "$STORAGE_POOL" source)"
# Verify
echo "$STORAGE_POOL_SOURCE"
Btrfsストレージプールファイルを拡張します。
Sudo truncate -s "$NEW_SIZE" "$STORAGE_POOL_SOURCE"
ループバックデバイスに新しいサイズを認識させます。
STORAGE_POOL_LOOP_DEVICE="$(losetup -j "$STORAGE_POOL_SOURCE" |
awk -F': ' '{print $1}' |
head -1)"
Sudo losetup -c "$STORAGE_POOL_LOOP_DEVICE"
後でマウント名前空間を入力できるように、LXDプロセスIDを取得します。
LXD_PID=$(pgrep lxd | head -1)
# Verify
echo "$LXD_PID"
オンラインのBtrfsマウントポイントを取得します。
NS_MOUNT_POINT=$(Sudo nsenter -t "$LXD_PID" -m -- \
findmnt -no target "$STORAGE_POOL_LOOP_DEVICE")
# Verify
echo "$NS_MOUNT_POINT"
最後に、Btrfsファイルシステムのサイズを可能な最大サイズに変更します。
Sudo btrfs filesystem resize max "/proc/$LXD_PID/root/$NS_MOUNT_POINT"
一貫性を保つために、LXDデータベースを新しいサイズのストレージプールで更新します。
lxd sql global "UPDATE storage_pools_config SET value = '$NEW_SIZE'
WHERE
key = 'size' AND
storage_pool_id IN
(SELECT id FROM storage_pools WHERE name = '$STORAGE_POOL')"
# Verify
lxd sql global "SELECT * FROM storage_pools_config
WHERE storage_pool_id IN
(SELECT id FROM storage_pools WHERE name = '$STORAGE_POOL')"