CentOS 7 陪伴了我 11 年, 稳定可靠, 但也终于走到了生命周期的尽头。原本打算升级到 CentOS 8, 却被 RHEL 的背刺劝退。于是出现了 AlmaLinux 和 Rocky Linux 两个继任者。经过一番对比, 我选择了 Rocky Linux, 并且已经用上 Rocky 9 两年了。最大的感受就是
- 平滑迁移, 几乎没有大改动
- 系统依旧稳定, 延续了 CentOS 的传统
不过, 缺点也很明显: CentOS 的用户群体大量流失, 相关教程和资源少了许多。我常用的 DD 脚本也早已停止维护, 在很多 vps 上使用经常会造成失联。于是, 我决定自己动手制作 DD 包和自己的 DD 脚本。
简单来说, 就是在 VirtualBox 创建个虚拟机, 装上 virtio 驱动, 配置好系统, 然后导出镜像, 再压缩打包成 DD 包。
准备环境
准备 VirtualBox
下载 VirtualBox 并安装: VirtualBox 官方下载
我们需要先用 VirtualBox 创建一个虚拟机, 并选择 VHD 作为硬盘格式。
点击新建, 按提示设置虚拟机
- 设置名称和 ISO 镜像位置
- 取消勾选 Proceed with Unattended Installation
这里保持默认即可
为了提升安装和制作镜像的速度, 内存和 CPU 可以尽量分配多一些
同时要取消勾选 Use EFI
为了保证兼容性, 硬盘容量尽量越小越好
- CentOS 7 最小安装需要 2GB
- Rocky 9 最小安装需要 3.5GB
磁盘格式选择 VHD, 并勾选 Pre-allocate Full Size (固定大小 / 预先分配全部空间)
完成后, 就可以启动虚拟机并进入系统安装流程
安装并配置系统
安装时, 网络建议选择 DHCP, 其他选项保持默认即可。
硬盘分区
分区建议如下
- sda1: /boot 分区, 大小 512MiB, 文件系统随意 (如 xfs)
- sda2: Linux LVM 物理卷, 使用剩余所有空间 (方便后续扩展磁盘)
在卷组 rl_server
上创建一个逻辑卷 root
(名称可自定义), 挂载到 /
作为系统盘, 文件系统推荐 xfs
完成分区后即可开始安装
驱动支持
安装完成后, 以 root 身份登录, 开始做最后的准备工作
安装系统时生成的 initramfs 可能缺少虚拟化相关驱动, 这会导致某些 VPS 无法识别硬盘。因此, 在安装完成后, 需要确保系统中包含常见的 SCSI/虚拟化驱动, 以保证能够正常启动。
编辑 /etc/dracut.conf
, 加入以下内容
# additional kernel modules to the default
add_drivers+="virtio virtio_scsi virtio_blk xen_blkfront xenfs xen_privcmd hv_storvsc hv_vmbus hv_utils mptspi scsi_transport_spi mptscsih mptbase"
说明:
- KVM: virtio、virtio_scsi、virtio_blk
- Xen: xen_blkfront、xenfs、xen_privcmd
- Hyper-V: hv_storvsc、hv_vmbus、hv_utils
- VMware: mptspi、scsi_transport_spi、mptscsih、mptbase
重新生成 initramfs
dracut -f
验证是否成功, 有输出就行
lsinitrd /boot/initramfs-$(uname -r).img | grep virtio
清理与优化
在打包前, 需要清理系统, 避免冗余文件和隐私信息残留
清理软件包缓存
dnf autoremove
dnf clean all
删除系统随机种子文件, 以避免镜像重复使用时生成相同随机序列
rm -f /var/lib/systemd/random-seed
删除已有的 SSH 主机密钥 (避免镜像重复使用时冲突)
rm -f /etc/ssh/ssh_host_*
ll /etc/ssh/
清理日志、历史记录和临时文件
rm -rf /var/log/*
rm -rf .ssh .viminfo anaconda-ks.cfg
rm -rf /tmp/* /var/tmp/*
rm -f /root/.bash_history
清理磁盘以便压缩
dd if=/dev/zero of=zero.tmp bs=1M status=progress
sync
rm -f zero.tmp
sync
打包 DD 镜像
关机后, 找到虚拟机的 .VHD 硬盘文件, 然后进行压缩打包。
常见做法是使用 gzip
压缩为 .gz
格式, 但它是单线程的, 效率非常低。
以 Rocky 9.6 系统盘 (3.5GB) 为例
- 使用 gzip 压缩: 约 34 分钟, 生成文件大小 1.37GB
- 使用 xz 压缩: 仅 30 秒, 生成文件大小 1.22GB
因此, 推荐使用 7-Zip 压缩为 .xz
格式
扩展磁盘空间
DD 安装完成后, 磁盘空间并不会自动扩展
使用脚本一键扩展磁盘
bash <(curl -sL shell.puka.cc/lvm-disk-extend)
原文