這是本文件的舊版!


安裝 Ubuntu + LXD 移轉 PVE 內的舊 CT

  • 主要是因為在 Proxmox 內有一些 CentOS 7 的 CT 導致無法升級 PVE 到 9.x (參考 讓_pve_6_內的_centos7_的_ct_移轉至_pve_7_的妥協做法
  • 因為這些 CentOS 7 的 CT 內服務不易移轉到其他新版的 OS, 所以嘗試將這些 CT 由 Proxmox 移轉到 Ubuntu 24.04 (VM) 內使用 LXD 來管理
  • 安裝標準 Ubuntu 24.04 (4Core, 4G RAM 60G SSD)
  • Network :
    • IP : 192.168.1.210/24
    • GW : 192.168.1.1
  • 建立給 lxd 使用 bridge ens18 網路

    apt update && apt install -y bridge-utils
    mkdir -p /root/netplan-backup
    mv /etc/netplan/*.yaml /root/netplan-backup/
    cat > /etc/netplan/01-netcfg.yaml << 'EOF'
    network:
      version: 2
      renderer: networkd
      ethernets:
        ens18:
          dhcp4: no
          dhcp6: no
      bridges:
        br0:
          interfaces: [ens18]
          addresses: [192.168.1.210/24]
          routes:
            - to: default
              via: 192.168.1.1
              metric: 100  # 明確 metric,避免衝突
          nameservers:
            addresses: [1.1.1.1, 8.8.8.8]
          parameters:
            stp: false
            forward-delay: 0
    EOF
    netplan generate  # 應無錯誤/警告
    netplan apply  # 套用(暫斷網幾秒;用 console 執行以防 SSH 斷)

  • # 安裝 snapd
    apt update
    apt install snapd -y
    
    # 安裝 LXD
    snap install lxd
    
    # 初始化 LXD
    lxd init --auto

  • /usr/local/bin/mount-cgroup-v1.sh

    # 建立 systemd 服務來自動 mount v1 控制器(持久化,重啟後生效):
    # 建立啟動腳本(mount)
    cat > /usr/local/bin/mount-cgroup-v1.sh << 'EOF'
    #!/bin/bash
    set -e
    
    # 建立目錄(新增 systemd)
    mkdir -p /sys/fs/cgroup/{cpu,cpuacct,cpuset,memory,devices,freezer,blkio,net_cls,net_prio,pids,perf_event,systemd}
    
    # Mount v1 控制器(新增 systemd)
    mount -t cgroup -o none,name=cpu cpu /sys/fs/cgroup/cpu || true
    mount -t cgroup -o none,name=cpuacct cpuacct /sys/fs/cgroup/cpuacct || true
    mount -t cgroup -o none,name=cpuset cpuset /sys/fs/cgroup/cpuset || true
    mount -t cgroup -o none,name=memory memory /sys/fs/cgroup/memory || true
    mount -t cgroup -o none,name=devices devices /sys/fs/cgroup/devices || true
    mount -t cgroup -o none,name=freezer freezer /sys/fs/cgroup/freezer || true
    mount -t cgroup -o none,name=blkio blkio /sys/fs/cgroup/blkio || true
    mount -t cgroup -o none,name=net_cls net_cls /sys/fs/cgroup/net_cls || true
    mount -t cgroup -o none,name=net_prio net_prio /sys/fs/cgroup/net_prio || true
    mount -t cgroup -o none,name=pids pids /sys/fs/cgroup/pids || true
    mount -t cgroup -o none,name=perf_event perf_event /sys/fs/cgroup/perf_event || true
    mount -t cgroup -o none,name=systemd systemd /sys/fs/cgroup/systemd || true
    
    echo "cgroup v1 controllers (incl. systemd) mounted successfully."
    EOF

  • /usr/local/bin/umount-cgroup-v1.sh

    # 更新 umount 腳本(新增 systemd)
    cat > /usr/local/bin/umount-cgroup-v1.sh << 'EOF'
    #!/bin/bash
    set -e
    
    umount /sys/fs/cgroup/systemd 2>/dev/null || true
    umount /sys/fs/cgroup/perf_event 2>/dev/null || true
    umount /sys/fs/cgroup/pids 2>/dev/null || true
    umount /sys/fs/cgroup/net_prio 2>/dev/null || true
    umount /sys/fs/cgroup/net_cls 2>/dev/null || true
    umount /sys/fs/cgroup/blkio 2>/dev/null || true
    umount /sys/fs/cgroup/freezer 2>/dev/null || true
    umount /sys/fs/cgroup/devices 2>/dev/null || true
    umount /sys/fs/cgroup/memory 2>/dev/null || true
    umount /sys/fs/cgroup/cpuset 2>/dev/null || true
    umount /sys/fs/cgroup/cpuacct 2>/dev/null || true
    umount /sys/fs/cgroup/cpu 2>/dev/null || true
    
    echo "cgroup v1 controllers unmounted."
    EOF
    
    # 設定權限
    chmod +x /usr/local/bin/mount-cgroup-v1.sh /usr/local/bin/umount-cgroup-v1.sh

  • /etc/systemd/system/cgroup-v1-legacy.service

    # 建立單位檔案
    cat > /etc/systemd/system/cgroup-v1-legacy.service << 'EOF'
    [Unit]
    Description=Mount legacy cgroup v1 controllers for LXC containers
    After=systemd-remount-fs.service
    Before=lxd.service
    
    [Service]
    Type=oneshot
    RemainAfterExit=true
    ExecStart=/usr/local/bin/mount-cgroup-v1.sh
    ExecStop=/usr/local/bin/umount-cgroup-v1.sh
    
    [Install]
    WantedBy=multi-user.target
    EOF

  • 啟用服務:

    systemctl daemon-reload
    systemctl enable --now cgroup-v1-legacy.service
    systemctl restart cgroup-v1-legacy.service
    systemctl status cgroup-v1-legacy.service

  • 驗證 mount(檢查主機):

    mount | grep cgroup  # 應看到多個 v1 mount 如 /sys/fs/cgroup/cpu 等
    cat /proc/cgroups   # 應顯示 v1 控制器可用

  • Exp. 將 proxmox 的 ct-118 使用 vzdump 產生的 vzdump-lxc-118-2025_11_13-14_03_41.tar 複製到 Ubuntu VM 內

    vzdump 118 --dumpdir /tmp
    scp /tmp/vzdump-lxc-118-2025_11_13-14_03_41.tar [email protected]:/tmp

  • tech/ubuntu_lxd.1763029439.txt.gz
  • 上一次變更: 2025/11/13 18:23
  • jonathan