1. 自建yum仓库,分别为网络源和本地源
    1. 克隆虚机,作为yum仓库的基础环境,这里我使用的是CentOS 8,IP为192.168.7.6;
    2. 配置yum源并安装httpd服务;
      systemctl stop firewalld && systemctl disable firewalld
      cd /etc/yum.repo.d/ && mkdir bak && mv *.repo bak/
      cat > ali.repo << EOF
      [alimirror]
      name=Ali Mirrors
      baseurl=http://mirrors.aliyun.com/centos/8.0.1905/BaseOS/x86_64/os/
      gpgcheck=0
      enable=1
      EOF
      yum clean all && yum repolist
      yum -y install httpd && systemctl enable httpd && systemctl start httpd
      mkdir -p /var/www/html/centos/{7,8}/isos
    3. 虚机添加磁盘,分别载入CentOS 8 和 7 的镜像,并连接到yum仓库服务器;
    4. 扫描磁盘并挂载,查看磁盘:lsblk 或 df -h
      echo '- - -' > /sys/class/scsi_host/host2/scan
      mount /dev/sr0 /var/www/html/centos/8/isos
      mount /dev/sr1 /var/www/html/centos/7/isos
    5. 在另外一台CentOS 8服务器上配置yum源,IP地址为192.168.7.8
      cd /etc/yum.repo.d/ && mkdir bak && mv *.repo bak/
      cat > sys.repo << EOF
      [YSBase]
      name=Yum Server BaseOS
      baseurl=http://192.168.7.6/centos/$releasever/isos/BaseOS/
      gpgcheck=1
      gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-$releasever
      enable=1
      [YSApp]
      name=Yum Server App
      baseurl=http://192.168.7.6/centos/$releasever/isos/AppStream/
      gpgcheck=1
      gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-$releasever
      [epel]
      name=EPEL Server
      baseurl=http://mirrors.aliyun.com/epel/$releasever/Everything/$basearch/
      gpgcheck=1
      gpgkey=http://mirrors.aliyun.com/epel/RPM-GPG-KEY-EPEL-$releasever
      [LocalBase]
      name=Local BaseOS
      baseurl=file:///misc/cd/BaseOS
      gpgcheck=0
      [LocalApp]
      name=Local App
      baseurl=file:///misc/cd/AppStream
      gpgcheck=0
      EOF
      yum clean all && yum repolist
    6. 在另外一台CentOS 7服务器上配置yum源,IP地址为192.168.7.7,命令类似上方。
  2. 编译安装http2.4,实现可以正常访问,并将编译步骤和结果提交。
    cd /data/script
    cat > httpd_install.sh << EOF
    dnf -y install gcc make apr-devel apr-util-devel pcre-devel redhat-rpm-config
    mkdir -p /data/code && cd /data/code && wget https://mirrors.aliyun.com/apache/httpd/httpd-2.4.41.tar.gz
    tar -xvf httpd-2.4.41.tar.gz && cd httpd-2.4.41
    ./configure --prefix=/usr/apps/httpd && make && make install
    sed -ri '/^#ServerName/s@.*@ServerName www.cos.com:80@' /usr/apps/httpd/conf/httpd.conf
    /usr/apps/httpd/bin/apachectl -f /usr/apps/httpd/conf/httpd.conf
    curl http://127.0.0.1
    EOF
    chmod u+x httpd_install.sh
    ./httpd_install.sh





    资源地址及参考文档:

    • Starting Apache
    • Index of /apache/httpd/
    • httpd: Could not reliably determine the server's fully qualified domain name
  3. 创建一个 2G 的文件系统,块大小为 2048 byte,预留 1% 可用空间,文件系统 ext4,卷标为 TEST,要求此分区开机后自动挂载至/test目录,且默认有 acl 挂载选项
    在 VM 虚机上为系统添加磁盘,SATA 或 scsi 接口,磁盘大小 >= 2G,然后进入系统进行分区
    parted
    print devices
    select /dev/sdb
    mklabel|mktable gpt (yes)
    unit GB
    mkpart main ext4 0 2
    print
    quit



    创建文件系统

    mkfs.ext4 -L TEST -b 2048 -m 1 /dev/sdb1 (y)
    tune2fs -l /dev/sdb1


    挂载磁盘,并配置自动挂载

    mkdir /test
    echo 'UUID=e21c764d-0071-4695-b2ef-0b8d7dff91c8 /test ext4 defaults 0 0' >> /etc/fstab
    mount -a
    lsblk

  4. 创建一个至少有两个PV组成的大小为20G的名为testvg的VG;要求PE大小 为16MB, 而后在卷组中创建大小为5G的逻辑卷testlv;挂载至/users目录
    # 通过 fdisk、gdisk、parted 对 /dev/sdb(16G) 和 /dev/sdc(20G) 进行分区
    # 创建1个6G的分区
    parted /dev/sdc
    # 创建2个7G的分区
    gdisk /dev/sdb
    # 创建物理卷
    pvcreate /dev/sd{b1,b2,c1}
    vgcreate -s 16M /dev/vgx !*
    lvcreate -n testlv -L 5G /dev/vgx
    ! [ -d /users ] && mkdir /users
    mkfs.ext4 /dev/vgx/testlv
    mount !$ /users

    六、软件包管理、磁盘存储和文件系统_第1张图片
    六、软件包管理、磁盘存储和文件系统_第2张图片
    六、软件包管理、磁盘存储和文件系统_第3张图片
    六、软件包管理、磁盘存储和文件系统_第4张图片

  5. rm -f /lib64/libc.so.6 之后修复系统;
    磁盘装载对应版本的系统,进入系统恢复模式,执行下面的命令后重启虚机即可
    ln -s libc-2.28.so libc.so.6(CentOS8)
    ln -s libc-2.17.so libc.so.6(CentOS7)
  6. 卸载内核,无法启动,修复系统;
    删除所有已安装的内核:
    rpm -e `rpm -qa kernel`
    删除相关的文件:
    rm -f /boot/initramfs* /boot/vmlinuz* /boot/System.map* /boot/loader/entries/*.conf
    之后磁盘装载对应版本的系统,重启虚机,进入恢复模式,执行下面的命令安装kernel
    cd /run/install/repo/BaseOS/Packages
    rpm -ivh kernel-core-4.18.0-147.el8.x86_64.rpm --root=/mnt/sysimage/
    rpm -ivh kernel-modules-4.18.0-147.el8.x86_64.rpm --root=/mnt/sysimage/
    rpm -ivh kernel-4.18.0-147.el8.x86_64.rpm --root=/mnt/sysimage/
    rpm -ivh kernel-tools-4.18.0-147.el8.x86_64.rpm --root=/mnt/sysimage/
    rpm -ivh kernel-tools-libs-4.18.0-147.el8.x86_64.rpm --root=/mnt/sysimage/
    grub2-mkconfig -o /mnt/sysimage/boot/grub2/grub.cfg
    之后重启虚机,应该就可以看到类似的界面了。如果有多个,
    就进入到系统里面再删除多余的kernel信息,再执行下面的命令后重启虚机
    grub2-mkconfig -o /boot/grub2/grub.cfg


  7. 自定义yum源服务器,为CentOS 7安装dnf
    在yum源服务器上执行下面的命令:
    如果没有安装 createrepo,执行下面的安装命令:
    yum -y install createrepo

    获取安装包,并生成包的元数据

    mkdir -p /var/www/html/tools/7 && cd /var/www/html/tools/7 && cat>dnf.url<

    在CentOS 7 客户端上执行下面的命令:

    cd /etc/yum.repo.d/
    cat >> source.repo << EOF
    [YumDnf]
    name=Yum Server DNF
    baseurl=http://192.168.8.6/tools/7
    gpgcheck=0
    EOF
    yum clean all && yum -y install dnf

    执行结果类似下图,如果提示缺少xxx包,直接到阿里云开源镜像站搜素,注意包是否兼容你的客户端,在yum源服务器上将下载地址追加到dnf.url,去掉下载地址后面无用的参数,只保留下载地址,如

    echo https://mirrors.aliyun.com/centos/7.7.1908/extras/x86_64/Packages/xxx.x86_64.rpm >> dnf.url

    然后再依次执行服务器和客户端上的命令。

  8. 初始化脚本
    #!/bin/bash
    #
    #**********************************************
    #Author:    Ably
    #QQ:        1009700469
    #Date:      2020-03-08
    #FileName:  c8init.sh
    #URL:       https://segmentfault.com/u/gobetter/articles
    #Description:   CentOS 8 init script.
    #Copyright(C):  2020 All rights reserved.
    #**********************************************
    find / -name "lost+found"|xargs rm -rf
    sed -ri 's@SELINUX=enabled@SELINUX=disabled@' /etc/selinux/config
    systemctl stop firewalld && systemctl disable firewalld
    echo "init vim's config ~/.vimrc"
    cat>~/.vimrc</etc/profile.d/env.sh</etc/issue<source.repo<
  9. 查询命令java来自哪个rpm包
    dnf -y install java-1.8.0-openjdk && java -version
    rpm -qf $(ll `ll /usr/bin/java|egrep -o '[[:alpha:]/]+$'`|egrep -o '[^[:space:]]+$')

    参考文档:使用RPM获取包的信息--解释的很好

  10. Ubuntu 19.10安装桌面
    sudo apt -y update && sudo apt -y install ubuntu-desktop

  11. 硬盘分区表的备份与还原
    备份(提前在备份服务器上创建备份文件夹 /data/back/)
    mkdir -p /data/back && dd if=/dev/sda of=/data/back/part.bak bs=1 count=66 skip=446 && scp /data/back/part.bak [email protected]:/data/back/

    到备份服务器检测备份的可用性,确认可用后再执行后面的步骤

    hexdump -C /data/back/part.bak

    破坏客户端分区表

    dd if=/dev/zero of=/dev/sda bs=1 count=66 seek=446

    还原(重启客户端并进入急救模式)

    # 为客户端配置可用的IP(ens33为网卡名称)
    ifconfig ens33 192.168.8.8/24 && ifconfig ens33
    # 将备份的分区表数据拷贝回客户端
    scp [email protected]:/data/back/part.bak .
    dd if=part.bak of=/dev/sda bs=1 count=66 seek=446 && hexdump -C -n 512 /dev/sda
    # 确认分区表数据
    cat >> /etc/profile.d/env.sh <
  12. 实现分区、swap(分区)、swap(文件)、光盘的自动挂载,及挂载设备信息出错时的修复;实现文件夹的自动绑定;
    分区
    # 普通分区
    parted
    print
    select /dev/sdb
    mktable gpt
    unit GB
    mkpart main ext4 0 2
    quit
    # 将文件作为文件系统的载体
    dd if=/dev/zero of=/data/swapfile bs=1M count=2048

    文件系统的创建

    # 创建普通文件系统
    mkfs.ext4 -b 2048 -L "/data/normal" -m 2 /dev/sdb1
    # 分区创建swap
    mkswap /dev/sdb2
    # 文件创建swap
    mkswap /data/swapfile

    自动挂载

    # 普通文件系统
    mkdir /data/normal; echo '/dev/sdb1 /data/normal ext4 defaults 0 3' >> /etc/fstab;mount -a;
    # swap(分区及文件)
    mkdir /data/swappart;echo '/dev/sdb2 /data/swappart swap swap 0 0' >> /etc/fstab;swapon -a(或 swapoff /dev/sdb2;swapon -a);
    mkdir /mnt/swapfile;echo '/data/swapfile /mnt/swapfile swap swap 0 0' >> /etc/fstab;swapon -a;
    # 光盘
    echo '/dev/sr0 /path/dir iso9660 defaults 0 0' >> /etc/fstab;mount -a

    文件夹自动绑定

    mkdir /data/dir{1,2};echo '/data/dir1 /data/dir2 none bind 0 0' >> /etc/fstab;mount -a;

    挂载出现问题导致的启动失败

    # 等待界面出现输入提示符,输入密码进入系统的临时窗口
    blkid
    vim /etc/fstab
    # 将错误的挂载信息更正后保存,如果权限不够
    mount -o remount,rw /
    # /etc/fstab 文件确认更正无误后重启机器