学习目标

  • 理解本节涉及的核心主题:系统备份与恢复、备份与恢复最佳实践、总结、高级 Linux 管理。
  • 掌握重点命令或工具:Docker
  • 能够结合示例完成常见操作,并理解关键参数、使用场景与结果差异。
  • 能够识别本节相关的常见风险、易错点或排查思路。

学习重点

  • 主题范围:系统备份与恢复、备份与恢复最佳实践、总结、高级 Linux 管理、内核管理、查看内核版本
  • 重点命令:Docker
  • 学习重点:命令用途、关键参数、典型场景、与相近命令的区别
  • 复习方式:先理解场景,再动手练习,最后对照结果检查

系统备份与恢复

备份与恢复最佳实践

为了确保备份与恢复的有效性和可靠性,遵循以下最佳实践非常重要:

  1. 制定全面的备份策略
    • 确定备份的频率和范围(全量备份、增量备份、差异备份)。
    • 根据数据重要性和业务需求,制定不同的数据保护等级。
    • 确定备份的存储位置(本地、远程、云端)。
  2. 自动化备份任务
    • 使用 cron 或其他任务调度工具,自动执行备份脚本,减少人为错误。
    • 监控备份任务的执行状态,确保备份按时完成。
  3. 定期测试恢复过程
    • 定期从备份中恢复数据,验证备份文件的完整性和可用性。
    • 记录恢复过程中的问题和解决方案,优化恢复流程。
  4. 保护备份数据
    • 对备份数据进行加密,防止未经授权的访问和数据泄露。
    • 设置合理的访问权限,限制只有授权人员可以访问备份文件。
  5. 保持备份的冗余性
    • 将备份数据存储在多个位置,防止单点故障导致备份数据丢失。
    • 使用不同的存储介质(如硬盘、磁带、云存储)增强数据安全性。
  6. 监控备份和恢复活动
    • 使用监控工具,实时监控备份和恢复任务的状态。
    • 配置报警机制,及时发现和处理备份失败或异常情况。
  7. 记录备份和恢复日志
    • 记录详细的备份和恢复日志,便于追踪和审计。
    • 定期审查日志,发现潜在问题并采取纠正措施。

总结

系统备份与恢复是 Linux 系统管理中不可或缺的一部分。通过合理制定备份策略,选择合适的备份工具,并遵循最佳实践,系统管理员可以有效地保护数据安全,确保在发生故障或数据丢失时能够迅速恢复系统和业务。本文介绍的 rsynctardd 等工具,以及 extundeletetestdiskfsck 等恢复工具,提供了多种备份与恢复的解决方案,适用于不同的应用场景和需求。

以下是基于具体实例的应用总结:

  • 使用 rsync 进行定期文件备份
    创建一个每日备份脚本 backup_documents.sh

    #!/bin/bash
    
    SOURCE="/home/user/documents/"
    DESTINATION="user@backup.example.com:/backup/documents_backup/"
    LOGFILE="/var/log/rsync_backup.log"
    
    rsync -avz --delete -e ssh "$SOURCE" "$DESTINATION" >> "$LOGFILE" 2>&1
    
    echo "Backup completed on $(date)" >> "$LOGFILE"
    

    设置 cron 任务每天凌晨2点执行备份:

    crontab -e
    

    添加以下行:

    0 2 * * * /path/to/backup_documents.sh
    
  • 使用 tar 创建和恢复压缩归档
    创建备份归档:

    tar -czvf /backup/documents_backup_2024-04-27.tar.gz /home/user/documents/
    

    恢复备份归档:

    tar -xzvf /backup/documents_backup_2024-04-27.tar.gz -C /home/user/restored_documents/
    
  • 使用 dd 创建和恢复全盘镜像
    创建全盘镜像:

    sudo dd if=/dev/sda of=/backup/sda_backup_2024-04-27.img bs=4M status=progress
    sudo sync
    

    恢复全盘镜像:

    sudo dd if=/backup/sda_backup_2024-04-27.img of=/dev/sda bs=4M status=progress
    sudo sync
    
  • 使用 extundelete 恢复被删除的文件
    恢复 /home/user/documents/file.txt

    sudo umount /dev/sda1
    sudo extundelete /dev/sda1 --restore-file /home/user/documents/file.txt
    ls RECOVERED_FILES/home/user/documents/
    
  • 使用 testdisk 恢复丢失的分区
    恢复丢失的分区表:

    sudo testdisk
    # 按照界面指引选择磁盘、分区表类型,执行分区恢复操作
    
  • 使用 fsck 检查并修复文件系统
    检查并修复 /dev/sda1

    sudo umount /dev/sda1
    sudo fsck -y /dev/sda1
    sudo mount /dev/sda1 /mnt
    

高级 Linux 管理

内核管理

内核是 Linux 系统的核心,负责管理硬件资源、系统调用和底层操作。掌握内核管理可以帮助系统管理员优化系统性能、增加新功能或修复特定问题。

查看内核版本

了解当前运行的内核版本对于系统维护、故障排查和内核升级至关重要。

  • 使用 uname -r 查看内核版本
    uname 命令用于显示系统信息,其中 -r 选项显示内核版本。

    uname -r
    

    示例输出:

    5.15.0-76-generic
    
  • 查看详细内核版本信息,使用 cat /proc/version
    /proc/version 文件包含更详细的内核版本信息,包括编译时间和编译者信息。

    cat /proc/version
    

    示例输出:

    Linux version 5.15.0-76-generic (buildd@lgw01-amd64-052) (gcc (Ubuntu 9.3.0-17ubuntu1~20.04) 9.3.0, GNU ld (GNU Binutils for Ubuntu) 2.34) #83-Ubuntu SMP Thu Aug 4 19:49:43 UTC 2023
    

编译与安装自定义内核

编译和安装自定义内核允许系统管理员根据特定需求优化内核配置,添加或移除功能模块,提升系统性能或支持特定硬件。

获取内核源代码(使用 git 克隆官方仓库)
  1. 安装必要的依赖工具
    sudo apt update
    sudo apt install build-essential libncurses-dev bison flex libssl-dev libelf-dev git
    
  2. 克隆 Linux 内核官方仓库
    git clone https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
    cd linux
    
  3. 检出特定内核版本(可选)
    git checkout v5.15
    
配置内核选项(使用 make menuconfig
  1. 进入内核源代码目录

    cd linux
    
  2. 清理之前的配置

    make mrproper
    
  3. 复制当前内核配置作为基础

    cp /boot/config-$(uname -r) .config
    
  4. 启动内核配置界面

    make menuconfig
    

    说明:

    • make menuconfig 提供了一个基于文本的用户界面,用于配置内核选项。
    • 使用箭头键导航,空格键选择或取消选项,M 将选项编译为模块。
编译内核(使用 make 命令)
  1. 编译内核

    make -j$(nproc)
    

    说明:

    • -j$(nproc) 选项使用所有可用的 CPU 核心并行编译,提高编译速度。
  2. 编译内核模块

    make modules -j$(nproc)
    
安装内核模块与内核(使用 make modules_installmake install
  1. 安装内核模块

    sudo make modules_install
    

    说明:

    • 将编译好的内核模块安装到 /lib/modules/ 目录下。
  2. 安装内核

    sudo make install
    

    说明:

    • 将编译好的内核和相关文件复制到 /boot 目录。
    • 更新初始 RAM 磁盘(initramfs)。
    • 更新引导加载器(如 GRUB)配置文件。
更新引导加载器并重启系统
  1. 更新 GRUB 配置

    sudo update-grub
    
  2. 重启系统

    sudo reboot
    
  3. 验证新内核版本
    重启后,使用以下命令确认系统正在运行新内核:

    uname -r
    

    示例输出:

    5.15.0-custom
    
注意事项与风险
  • 数据备份:在编译和安装自定义内核前,务必备份重要数据,以防意外情况。
  • 系统稳定性:不当的内核配置可能导致系统不稳定或无法启动。建议在虚拟机或测试环境中先行测试。
  • 兼容性:确保内核配置与系统硬件和软件需求兼容。

配置内核模块与加载

内核模块是内核的可加载组件,允许在运行时添加或移除功能,如驱动程序和文件系统支持。合理管理内核模块可以优化系统性能和资源使用。

使用 lsmod 查看已加载模块

lsmod 命令列出当前已加载的内核模块及其依赖关系。

lsmod

示例输出:

Module                  Size  Used by
nvidia_drm             57344  0
nvidia_modeset       1114112  1 nvidia_drm
nvidia              20500480  1 nvidia_modeset
...
使用 modprobe 加载与卸载模块
  • 加载模块
    modprobe 命令加载指定的内核模块,并自动处理依赖关系。

    sudo modprobe module_name
    

    示例:

    加载 dummy 网络接口模块:

    sudo modprobe dummy
    
  • 卸载模块
    使用 -r 选项卸载指定模块。

    sudo modprobe -r module_name
    

    示例:

    卸载 dummy 模块:

    sudo modprobe -r dummy
    
管理模块自动加载

为确保特定模块在系统启动时自动加载,可以通过编辑 /etc/modules 文件或在 /etc/modprobe.d/ 目录下创建配置文件。

  • 编辑 /etc/modules 文件
    将要自动加载的模块名称添加到文件中,每行一个。

    sudo nano /etc/modules
    

    示例内容:

    dummy
    bonding
    
  • 使用 /etc/modprobe.d/ 配置文件
    创建一个自定义配置文件,指定模块加载选项或别名。

    sudo nano /etc/modprobe.d/custom.conf
    

    示例内容:

    # 自动加载 dummy 模块
    dummy
    
    # 配置 bonding 模块选项
    options bonding mode=1 miimon=100
    
示例与应用场景
  • 创建虚拟网络接口
    使用 dummy 模块创建虚拟网络接口,用于测试和虚拟化场景。

    sudo modprobe dummy numdummies=2
    ip link add dummy0 type dummy
    ip addr add 192.168.1.100/24 dev dummy0
    ip link set dummy0 up
    
  • 配置网络聚合(Bonding)
    使用 bonding 模块实现网络接口的聚合,提高带宽和冗余。

    sudo modprobe bonding mode=1 miimon=100
    

    编辑网络配置文件(如 /etc/network/interfaces):

    auto bond0
    iface bond0 inet static
        address 192.168.1.200
        netmask 255.255.255.0
        gateway 192.168.1.1
        bond-slaves eth0 eth1
        bond-mode 1
        bond-miimon 100
    

    重启网络服务:

    sudo systemctl restart networking
    

虚拟化技术

虚拟化技术允许在单一物理硬件上运行多个虚拟机或容器,提高资源利用率和灵活性。常见的虚拟化技术包括容器化(如 Docker)和虚拟机(如 KVM、VirtualBox、VMware)。

使用 Docker 构建和管理容器

Docker 是一种流行的容器化平台,允许开发者打包应用及其依赖项到轻量级、可移植的容器中,实现一致的运行环境和快速部署。

基本概念与优势
  • 基本概念
    • 容器:独立的运行环境,包含应用程序及其所有依赖项。
    • 镜像:容器的模板,包含文件系统和应用程序。
    • Docker Engine:运行和管理容器的后台服务。
    • Docker Hub:官方的镜像仓库,提供大量预构建的镜像。
  • 优势
    • 轻量级:容器共享宿主机内核,资源占用低。
    • 可移植性:容器镜像可以在任何支持 Docker 的环境中运行。
    • 一致性:确保开发、测试和生产环境的一致性。
    • 快速部署:容器启动速度快,适合持续集成和持续部署(CI/CD)。
安装 Docker(使用包管理工具或官方脚本)
  1. 卸载旧版本(如存在)

    sudo apt remove docker docker-engine docker.io containerd runc
    
  2. 安装必要的依赖

    sudo apt update
    sudo apt install apt-transport-https ca-certificates curl gnupg lsb-release
    
  3. 添加 Docker 官方 GPG 密钥

    curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
    
  4. 设置稳定版仓库

    echo \
      "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \
      $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
    
  5. 安装 Docker Engine

    sudo apt update
    sudo apt install docker-ce docker-ce-cli containerd.io
    
  6. 验证安装

    sudo docker run hello-world
    

    示例输出:

    Hello from Docker!
    This message shows that your installation appears to be working correctly.
    
创建与管理容器
  • 拉取镜像(docker pull
    从 Docker Hub 拉取指定镜像。

    sudo docker pull ubuntu:20.04
    
  • 运行容器(docker run
    创建并启动一个新的容器实例。

    sudo docker run -it --name my_ubuntu ubuntu:20.04 /bin/bash
    

    说明:

    • -it:交互式终端。
    • --name my_ubuntu:指定容器名称。
    • ubuntu:20.04:使用的镜像及其标签。
    • /bin/bash:容器启动后执行的命令。
  • 列出容器(docker ps
    查看当前运行的容器。

    sudo docker ps
    

    示例输出:

    CONTAINER ID   IMAGE         COMMAND       CREATED          STATUS          PORTS     NAMES
    a1b2c3d4e5f6   ubuntu:20.04  "/bin/bash"   10 minutes ago   Up 10 minutes             my_ubuntu
    

    查看所有容器(包括停止的)

    sudo docker ps -a
    
  • 停止与删除容器(docker stop, docker rm

    • 停止容器
      sudo docker stop my_ubuntu
      
    • 删除容器
      sudo docker rm my_ubuntu
      
Docker 网络与存储管理
  • 网络管理
    Docker 提供多种网络驱动,支持容器之间的通信和外部访问。
    • 默认网络驱动
      • bridge:默认的单主机网络,容器通过桥接网络相互通信。
      • host:容器共享宿主机网络堆栈。
      • none:容器不连接任何网络。
    • 创建自定义网络
      sudo docker network create my_bridge_network
      
    • 运行容器并连接到自定义网络
      sudo docker run -d --name web_server --network my_bridge_network nginx
      
  • 存储管理
    Docker 支持多种存储驱动,允许将宿主机的目录或卷挂载到容器中,实现数据持久化。
    • 绑定挂载
      将宿主机目录绑定到容器目录。
      sudo docker run -d --name my_nginx -v /home/user/www:/usr/share/nginx/html nginx
      
    • 命名卷
      使用 Docker 管理的卷,简化数据持久化。
      sudo docker volume create my_volume
      sudo docker run -d --name db_server -v my_volume:/var/lib/mysql mysql
      
Docker Compose 基础

Docker Compose 是一个用于定义和运行多容器 Docker 应用的工具。通过 docker-compose.yml 文件,可以一键启动和管理多个相关容器。

  • 安装 Docker Compose

    sudo curl -L "https://github.com/docker/compose/releases/download/v2.20.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
    sudo chmod +x /usr/local/bin/docker-compose
    

    验证安装

    docker-compose --version
    

    示例输出:

    docker-compose version 2.20.0, build 1110ad5
    
  • 创建 docker-compose.yml 文件
    示例:部署一个简单的 Web 应用

    version: '3.8'
    
    services:
      web:
        image: nginx:latest
        ports:
          - "80:80"
        volumes:
          - ./www:/usr/share/nginx/html
        networks:
          - webnet
    
      db:
        image: mysql:5.7
        environment:
          MYSQL_ROOT_PASSWORD: example
        volumes:
          - db_data:/var/lib/mysql
        networks:
          - webnet
    
    volumes:
      db_data:
    
    networks:
      webnet:
    
  • 启动多容器应用

    sudo docker-compose up -d
    
  • 查看运行状态

    sudo docker-compose ps
    
  • 停止和删除容器

    sudo docker-compose down
    

    说明:

    • down 命令会停止并删除容器、网络和卷(除非指定 -v)。
示例与应用场景
  • 微服务架构
    使用 Docker Compose 部署多个微服务,如 Web 服务器、数据库、缓存等,简化管理和扩展。
  • 开发环境
    为开发项目创建一致的开发环境,确保开发、测试和生产环境的一致性。
  • 持续集成与持续部署(CI/CD)
    结合 CI/CD 工具,自动化构建、测试和部署容器化应用。

本节总结

  • 本节主要围绕 系统备份与恢复、备份与恢复最佳实践、总结、高级 Linux 管理、内核管理 展开。
  • 需要重点掌握的命令或工具包括:Docker
  • 学习时应优先抓住「命令解决什么问题、在什么场景下使用、执行后会产生什么结果」。
  • 对涉及权限、覆盖、网络、系统服务、删除或安全配置的操作,建议先在测试环境练习。

复习建议

  • 先用自己的话复述本节每个主题或命令的作用,避免只记参数不懂用途。
  • 按原文示例至少手敲一遍典型命令,并观察输出变化。
  • 对高风险操作先确认路径、权限和目标对象,再执行实际命令。
  • 可优先复习这些高频命令:Docker