系统裁剪之旅(2)——系统压缩

目录

前文回顾:

本章内容:

原理解析:

操作流程:


前文回顾:

我们上一章《系统裁剪之旅(1)——虚拟机环境搭建》中详细描述了如何创建了虚拟机,并安装了Centos7操作系统。

本章内容:

对Centos7系统的“根目录”和“boot”目录进行拷贝。

原理解析:

在Linux中,所谓“系统裁剪”或者“系统拷贝”其实都是对文件目录的操作。Centos7中主要设计的目录结构有“boot”和“rootfs”。

boot:一般放在根目录(“/”)下,系统启动时会用到,主要功能是完成系统引导。

rootfs:其实就可以理解为根目录(“/”)下,除了“boot”目录外的其他目录结构和文件。

我们复制系统就只要把这两个目录的结构和里面的文件都原封不动的复制到另一块硬盘上。

操作流程:

  • 系统启动后登陆到“root”用户下。
  • 在根目录下新建文件夹“mysys”目录。
mkdir /mysys/

 配置临时ip地址,具体方法参考:《最小化安装Centos 7快速设置临时IP(无ifconfig)

  • 将syscopy.sh脚本放到“/mysys”目录下,脚本内容如下:

syscopy.sh

#!/bin/sh
unalias cp
rootdir=`pwd`
rm -rf ${rootdir}/centos*
KERNEL_DIR=${rootdir}/kernel
ROOTFS_DIR=${rootdir}/rootfs
if [ -d ${KERNEL_DIR} ]; then
   echo "remove kernel dir"
   rm -rf ${KERNEL_DIR}
fi
echo "mkdir kernel dir"
mkdir ${KERNEL_DIR}
if [ -d ${ROOTFS_DIR} ]; then
   echo "remove rootfs dir"
   rm -rf ${ROOTFS_DIR}
fi
echo "mkdir rootfs dir"
mkdir ${ROOTFS_DIR}
rm -rf  centos7_* 
#-------- reduce /var/lib/rpm/Packages----------
rpm --rebuilddb
echo "--run:yum clean all"
yum clean all
echo "Begin to copy kernel ...."
kernel_version=`uname -r`
cp -cpR /boot/*${kernel_version}* ${KERNEL_DIR}
cp -cpR /boot/grub ${KERNEL_DIR}
mkdir -p ${KERNEL_DIR}/grub2
cp -cpR /boot/grub2/grub.cfg ${KERNEL_DIR}/grub2
echo "Copy kernel finish..."
echo "Begin to copy rootfs..."
cp -cpR /bin ${ROOTFS_DIR}
cp -cpR /dev ${ROOTFS_DIR}
cp -cpR /etc ${ROOTFS_DIR}
cp -cpR /lib ${ROOTFS_DIR}
cp -cpR /lib64 ${ROOTFS_DIR}
cp -cpR /opt ${ROOTFS_DIR}
cp -cpR /root ${ROOTFS_DIR}
cp -cpR /run ${ROOTFS_DIR}
cp -cpR /sbin ${ROOTFS_DIR}
cp -cpR /srv ${ROOTFS_DIR}
cp -cpR /tmp ${ROOTFS_DIR}
cp -cpR /usr ${ROOTFS_DIR}
cp -cpR /var ${ROOTFS_DIR} 
mkdir -p ${ROOTFS_DIR}/boot
mkdir -p ${ROOTFS_DIR}/bootloader
mkdir -p ${ROOTFS_DIR}/ftp
mkdir -p ${ROOTFS_DIR}/media
mkdir -p ${ROOTFS_DIR}/proc
mkdir -p ${ROOTFS_DIR}/sys
mkdir -p ${ROOTFS_DIR}/tar
mkdir -p ${ROOTFS_DIR}/system
mkdir -p ${ROOTFS_DIR}/home
rm -rf ${ROOTFS_DIR}/usr/share/man/*
rm -rf ${ROOTFS_DIR}/usr/share/doc/*
rm -rf  ${ROOTFS_DIR}/usr/share/locale/*
cp -cpR /usr/share/locale/zh_[C]*  ${ROOTFS_DIR}/usr/share/locale/
cp -cpR /usr/share/locale/zh  ${ROOTFS_DIR}/usr/share/locale/
cp -cpR /usr/share/locale/en  ${ROOTFS_DIR}/usr/share/locale/
cp -cpR /usr/share/locale/en_US  ${ROOTFS_DIR}/usr/share/locale/
#--------rm yum(yum can use)-----------
rm -rf  ${ROOTFS_DIR}/var/lib/yum/yumdb/*
rm -rf  ${ROOTFS_DIR}/var/lib/yum/history*
echo "--------all is finish-------------"
echo "----------------------------"
du -sh ${rootdir}/
du -sh ${rootdir}/*
echo "----------------------------"
echo

  • 到“/mysys/”目录下执行syscompy.sh脚本
cd /mysys
bash ./syscopy.sh

脚本执行完毕后再“/mysys/”目录下会出现如下文件:

  其中“boot”和“rootfs”分别对用“引导”与“文件系统”。

  • 对“./boot/grub2/grub.cfg”进行编辑:
 vi ./boot/grub2/grub.cfg

第88行附近,改成下面的样子。主要是把“root”指向的磁盘位置改成相对路径的盘符,这里用“/dev/sda3”是因为后续我们在新虚拟机上挂载的硬盘打概率会是“sda”,而按照我们现在的分区方式,“rootfs”就会是“/dev/sda3”。

### BEGIN /etc/grub.d/10_linux ###
menuentry 'CentOS Linux (3.10.0-1160.el7.x86_64) 7 (Core)' --class centos --class gnu-linux --class gnu --class os --unrestricted $menuentry_id_option 'gnulinux-3.10.0-1160.el7.x86_64-advanced-81bc4148-6cad-4881-b52f-2606f63c95f3' {
        load_video
        set gfxpayload=keep
        insmod gzio
        insmod part_msdos
        insmod xfs
        set root='hd0,msdos1'
        #if [ x$feature_platform_search_hint = xy ]; then
        #  search --no-floppy --fs-uuid --set=root --hint-bios=hd0,msdos1 --hint-efi=hd0,msdos1 --hint-baremetal=ahci0,msdos1 --hint='hd0,msdos1'  cc33a24e-4219-4265-881c-0bb799c045b3
        #else
        #  search --no-floppy --fs-uuid --set=root cc33a24e-4219-4265-881c-0bb799c045b3
        #fi
        #linux16 /vmlinuz-3.10.0-1160.el7.x86_64 root=/dev/mapper/centos-root ro crashkernel=auto spectre_v2=retpoline rd.lvm.lv=centos/root rd.lvm.lv=centos/swap rhgb quiet LANG=zh_CN.UTF-8
        linux16 /vmlinuz-3.10.0-1160.el7.x86_64 root=/dev/sda3 rhgb quiet LANG=zh_CN.UTF-8
        initrd16 /initramfs-3.10.0-1160.el7.x86_64.img
}

  • 对“./rootfs/etc/fstab”进行编辑:
vi ./rootfs/etc/fstab

改成如下样子:

#
# /etc/fstab
# Created by anaconda on Thu Sep 16 00:03:17 2021
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
/dev/sda3 /                       xfs     defaults        0 0
/dev/sda1 /boot                   xfs     defaults        0 0
/dev/sda2 swap                    swap    defaults        0 0
  • 将“boot”和“rootfs”打成压缩包:
    cd ./kernel/
    tar -zcvf centos7_boot.tar.gz *
    mv centos7_boot.tar.gz ../
    cd ../rootfs
    tar -zcvf centos7_rootfs.tar.gz *
    mv centos7_rootfs.tar.gz ../
    cd ..
    

    压缩后的结果如下:

 下一章:系统裁剪之旅(3)——克隆系统

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

高晓伟_Steven

相逢即是有缘,动力源于金钱。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值