這是本文件的舊版!
安裝 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 來管理
0. 建立 Ubuntu 24.04 VM
- 安裝標準 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 斷)
1. 使用 Snap 安裝 LXD 與相關配置
安裝 LXD
# 安裝 snapd apt update apt install snapd -y # 安裝 LXD snap install lxd # 初始化 LXD lxd init --auto
設定讓 cgroupv1 可以使用的 systemd 服務
- /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 控制器可用
2. 將 proxmox 的 ct 匯出
- 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