学习目标
- 理解本节涉及的核心主题:系统备份与恢复、备份与恢复最佳实践、总结、高级 Linux 管理。
- 掌握重点命令或工具:
Docker。 - 能够结合示例完成常见操作,并理解关键参数、使用场景与结果差异。
- 能够识别本节相关的常见风险、易错点或排查思路。
学习重点
- 主题范围:系统备份与恢复、备份与恢复最佳实践、总结、高级 Linux 管理、内核管理、查看内核版本
- 重点命令:
Docker - 学习重点:命令用途、关键参数、典型场景、与相近命令的区别
- 复习方式:先理解场景,再动手练习,最后对照结果检查
系统备份与恢复
备份与恢复最佳实践
为了确保备份与恢复的有效性和可靠性,遵循以下最佳实践非常重要:
- 制定全面的备份策略
- 确定备份的频率和范围(全量备份、增量备份、差异备份)。
- 根据数据重要性和业务需求,制定不同的数据保护等级。
- 确定备份的存储位置(本地、远程、云端)。
- 自动化备份任务
- 使用
cron或其他任务调度工具,自动执行备份脚本,减少人为错误。 - 监控备份任务的执行状态,确保备份按时完成。
- 使用
- 定期测试恢复过程
- 定期从备份中恢复数据,验证备份文件的完整性和可用性。
- 记录恢复过程中的问题和解决方案,优化恢复流程。
- 保护备份数据
- 对备份数据进行加密,防止未经授权的访问和数据泄露。
- 设置合理的访问权限,限制只有授权人员可以访问备份文件。
- 保持备份的冗余性
- 将备份数据存储在多个位置,防止单点故障导致备份数据丢失。
- 使用不同的存储介质(如硬盘、磁带、云存储)增强数据安全性。
- 监控备份和恢复活动
- 使用监控工具,实时监控备份和恢复任务的状态。
- 配置报警机制,及时发现和处理备份失败或异常情况。
- 记录备份和恢复日志
- 记录详细的备份和恢复日志,便于追踪和审计。
- 定期审查日志,发现潜在问题并采取纠正措施。
总结
系统备份与恢复是 Linux 系统管理中不可或缺的一部分。通过合理制定备份策略,选择合适的备份工具,并遵循最佳实践,系统管理员可以有效地保护数据安全,确保在发生故障或数据丢失时能够迅速恢复系统和业务。本文介绍的 rsync、tar 和 dd 等工具,以及 extundelete、testdisk 和 fsck 等恢复工具,提供了多种备份与恢复的解决方案,适用于不同的应用场景和需求。
以下是基于具体实例的应用总结:
-
使用
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 克隆官方仓库)
- 安装必要的依赖工具
sudo apt update sudo apt install build-essential libncurses-dev bison flex libssl-dev libelf-dev git - 克隆 Linux 内核官方仓库
git clone https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git cd linux - 检出特定内核版本(可选)
git checkout v5.15
配置内核选项(使用 make menuconfig)
-
进入内核源代码目录
cd linux -
清理之前的配置
make mrproper -
复制当前内核配置作为基础
cp /boot/config-$(uname -r) .config -
启动内核配置界面
make menuconfig说明:
make menuconfig提供了一个基于文本的用户界面,用于配置内核选项。- 使用箭头键导航,空格键选择或取消选项,
M将选项编译为模块。
编译内核(使用 make 命令)
-
编译内核
make -j$(nproc)说明:
-j$(nproc)选项使用所有可用的 CPU 核心并行编译,提高编译速度。
-
编译内核模块
make modules -j$(nproc)
安装内核模块与内核(使用 make modules_install 和 make install)
-
安装内核模块
sudo make modules_install说明:
- 将编译好的内核模块安装到
/lib/modules/目录下。
- 将编译好的内核模块安装到
-
安装内核
sudo make install说明:
- 将编译好的内核和相关文件复制到
/boot目录。 - 更新初始 RAM 磁盘(initramfs)。
- 更新引导加载器(如 GRUB)配置文件。
- 将编译好的内核和相关文件复制到
更新引导加载器并重启系统
-
更新 GRUB 配置
sudo update-grub -
重启系统
sudo reboot -
验证新内核版本
重启后,使用以下命令确认系统正在运行新内核: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(使用包管理工具或官方脚本)
-
卸载旧版本(如存在)
sudo apt remove docker docker-engine docker.io containerd runc -
安装必要的依赖
sudo apt update sudo apt install apt-transport-https ca-certificates curl gnupg lsb-release -
添加 Docker 官方 GPG 密钥
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg -
设置稳定版仓库
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 -
安装 Docker Engine
sudo apt update sudo apt install docker-ce docker-ce-cli containerd.io -
验证安装
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。