AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / computer / 问题 / 1483551
Accepted
exebook
exebook
Asked: 2019-09-18 08:34:32 +0800 CST2019-09-18 08:34:32 +0800 CST 2019-09-18 08:34:32 +0800 CST

增加 LXD/LXC Btrfs 循环文件存储池大小

  • 772

我们的生产容器崩溃了,因为它的 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

我记得一年前当我设置这个时,它问我 80GB 是否足够用于听起来不熟悉的东西,因为它没有说“容器磁盘大小”并说其他东西,我只是觉得我最好相信默认值选项。现在我知道这是磁盘空间限制。我现在如何提高这个限制?

此刻,我只是紧急清理了一些空间。主机实际上有 TB 的磁盘空间。

PS 很抱歉抱怨,但 LXC 的文档是我见过的最糟糕的文档之一。对于像我这样的用户来说,这没有任何意义。

PPS 我忘了我实际上使用的是 LXD,doh。lxc我打字做任何事情的事实让我感到困惑。

更新: 直观地说,我认为这个命令可以调整存储池的大小:

# lxc storage set default size 200GB

但它失败了:

Error: The [size] properties cannot be changed for "btrfs" storage pools

有任何想法吗?

filesystems btrfs
  • 1 1 个回答
  • 3283 Views

1 个回答

  • Voted
  1. Best Answer
    Deltik
    2019-09-18T10:05:15+08:002019-09-18T10:05:15+08:00

    从 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
    

    解释

    1. 将变量设置为$STORAGE_POOL存储池的名称。在您的情况下,它是default:

      STORAGE_POOL=default
      
    2. 将变量设置为$NEW_SIZE您现在希望存储池的大小:

      NEW_SIZE=100G
      

      该值是整数和可选单位(例如:10K 为 10*1024)。单位是 K、M、G、T、P、E、Z、Y(1024 的幂)或 KB、MB、...(1000 的幂)。

      重要提示:新大小必须大于当前 Btrfs 文件系统大小。如果大小更小,您将丢失存储池中的所有数据。

    3. 在主机上,找到 Btrfs 存储池文件的路径:

      STORAGE_POOL_SOURCE="$(lxc storage get "$STORAGE_POOL" source)"
      
      # Verify
      echo "$STORAGE_POOL_SOURCE"
      
    4. 增长 Btrfs 存储池文件:

      sudo truncate -s "$NEW_SIZE" "$STORAGE_POOL_SOURCE"
      
    5. 让环回设备知道新的大小:

      STORAGE_POOL_LOOP_DEVICE="$(losetup -j "$STORAGE_POOL_SOURCE" |
                                  awk -F': ' '{print $1}' |
                                  head -1)"
      
      sudo losetup -c "$STORAGE_POOL_LOOP_DEVICE"
      
    6. 获取一个 LXD 进程 ID,以便我们稍后可以进入它的挂载命名空间:

      LXD_PID=$(pgrep lxd | head -1)
      
      # Verify
      echo "$LXD_PID"
      
    7. 获取在线 Btrfs 挂载点:

      NS_MOUNT_POINT=$(sudo nsenter -t "$LXD_PID" -m -- \
                       findmnt -no target "$STORAGE_POOL_LOOP_DEVICE")
      
      # Verify
      echo "$NS_MOUNT_POINT"
      
    8. 最后,将 Btrfs 文件系统调整为最大可能大小:

      sudo btrfs filesystem resize max "/proc/$LXD_PID/root/$NS_MOUNT_POINT"
      
    9. 为了保持一致性,使用新的存储池大小更新 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')"
      
    • 7

相关问题

  • zip 文件中的文件名无效

  • 如何从 /sys 的后端查看日志

  • fuser 不显示打开文件的进程的 PID

  • 使用 Thunar 时无法跨文件系统边界丢弃文件

  • 是否可以在客户端中使用没有文件系统的 FTP?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    Windows 照片查看器因为内存不足而无法运行?

    • 5 个回答
  • Marko Smith

    支持结束后如何激活 WindowsXP?

    • 6 个回答
  • Marko Smith

    远程桌面间歇性冻结

    • 7 个回答
  • Marko Smith

    Windows 10 服务称为 AarSvc_70f961。它是什么,我该如何禁用它?

    • 2 个回答
  • Marko Smith

    子网掩码 /32 是什么意思?

    • 6 个回答
  • Marko Smith

    鼠标指针在 Windows 中按下的箭头键上移动?

    • 1 个回答
  • Marko Smith

    VirtualBox 无法以 VERR_NEM_VM_CREATE_FAILED 启动

    • 8 个回答
  • Marko Smith

    应用程序不会出现在 MacBook 的摄像头和麦克风隐私设置中

    • 5 个回答
  • Marko Smith

    ssl.SSLCertVerificationError: [SSL: CERTIFICATE_VERIFY_FAILED] 证书验证失败:无法获取本地颁发者证书 (_ssl.c:1056)

    • 4 个回答
  • Marko Smith

    我如何知道 Windows 安装在哪个驱动器上?

    • 6 个回答
  • Martin Hope
    Albin 支持结束后如何激活 WindowsXP? 2019-11-18 03:50:17 +0800 CST
  • Martin Hope
    fixer1234 “HTTPS Everywhere”仍然相关吗? 2019-10-27 18:06:25 +0800 CST
  • Martin Hope
    Kagaratsch Windows 10 删除大量小文件的速度非常慢。有什么办法可以加快速度吗? 2019-09-23 06:05:43 +0800 CST
  • Martin Hope
    andre_ss6 远程桌面间歇性冻结 2019-09-11 12:56:40 +0800 CST
  • Martin Hope
    Riley Carney 为什么在 URL 后面加一个点会删除登录信息? 2019-08-06 10:59:24 +0800 CST
  • Martin Hope
    zdimension 鼠标指针在 Windows 中按下的箭头键上移动? 2019-08-04 06:39:57 +0800 CST
  • Martin Hope
    Inter Sys Ctrl+C 和 Ctrl+V 是如何工作的? 2019-05-15 02:51:21 +0800 CST
  • Martin Hope
    jonsca 我所有的 Firefox 附加组件突然被禁用了,我该如何重新启用它们? 2019-05-04 17:58:52 +0800 CST
  • Martin Hope
    MCK 是否可以使用文本创建二维码? 2019-04-02 06:32:14 +0800 CST
  • Martin Hope
    SoniEx2 更改 git init 默认分支名称 2019-04-01 06:16:56 +0800 CST

热门标签

windows-10 linux windows microsoft-excel networking ubuntu worksheet-function bash command-line hard-drive

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve