25、Linux 系统维护与数据备份全攻略

Linux 系统维护与数据备份全攻略

在 Linux 系统的使用过程中,系统维护、数据备份以及磁盘空间管理是保障系统稳定运行和数据安全的关键环节。本文将详细介绍这些方面的操作方法和技巧。

1. 系统备份的重要性及策略

系统备份是防止文件意外删除的唯一有效方法。在进行备份时,若无法备份所有文件,需确定系统中最重要的文件。例如,若将 Linux 机器仅用作 Web 服务器,其备份要求可能与测试软件的机器不同。应定期归档系统中最关键的部分,对于从其他存储设备(如 CD - ROM、软盘等)加载的应用程序,除非有重大修改,否则无需备份。若支持多用户机器,应为 /home 目录树设置备份计划。

2. 文件和目录的压缩与解压

在备份文件时,常常需要对文件进行压缩。压缩还能减小用于电子邮件传输或存储在软盘上的文件大小。Linux 提供了多种压缩文件和目录的方法,其中 gzip 命令通常被认为是最常用的。

2.1 gzip gunzip 命令
  • gzip 命令 :用于压缩文件,基本语法为 #gzip filename
  • gunzip 命令 :用于解压由 gzip 压缩的文件,基本语法为 #gunzip filename

操作步骤

# 1. 选择要压缩的文件
#ls --l frankie.txt
--rw--r----r-   1 tb  users        1425 Mar 31 09:22 frankie.txt
# 2. 使用 gzip 命令压缩文件
#gzip frankie.txt
# 3. 检查压缩后的文件
#ls --l
total 1
--rw--r----r-   1 tb   users       705 Mar 31 09:22 frankie.txt.gz
# 4. 使用 gunzip 命令解压文件
#gunzip frankie.txt.gz
#ls -l
total 1
--rw--r----r-   1 tb users        1425 Apr  1 09:22 frankie.txt

gzip gunzip 命令还有一些常用的选项,如下表所示:
| 选项 | 助记符 | 描述 |
| ---- | ---- | ---- |
| h | help | 列出 gzip gunzip 的命令行选项 |
| v | verbose | 与 gzip 一起使用时,生成详细信息列表,包括压缩文件的名称和压缩程度(以原始文件大小的百分比表示) |
| l | list | 列出压缩文件中包含的文件的原始文件名 |
| t | test | 测试 gzip gunzip 命令的结果,指示预期结果而不实际执行指定命令 |
| r | recursive | 递归遍历目录树,压缩或解压与命令行中给定文件名匹配的文件 |
| c | concatenate | 从标准输入接受输入,或将输出放置到标准输出(允许在生成要压缩或解压的文件名时使用管道) |

2.2 tar 命令进行压缩归档

gzip 难以直接压缩整个目录或目录树,此时需要使用 tar 命令。 tar 可以接受整个文件系统作为输入,将所有目录和文件放入一个名为 tar 的文件中。

基本语法 #tar -cf tarfile.tar file(s)

tar 命令的主要功能标识符如下表所示:
| 功能标识符 | 助记符 | 操作 |
| ---- | ---- | ---- |
| c | create | 指示 tar 创建一个新的归档文件,将列出的文件和目录放入指定的 tar 文件中 |
| x | extract | 指示 tar 使用指定的 tar 归档文件重新创建一组原始文件(和目录) |
| t | list | 生成存储在 tar 文件中的列出文件的列表(如果命令行中未列出文件,则列出 tar 中的所有文件) |
| u | update | 如果列出的文件当前不在 tar 文件中,或者其修改时间(m 时间)比 tar 文件中已包含的文件更新,则用这些文件更新现有的 tar 文件 |
| z | gzip | 通过 gzip 处理归档文件,用于自动压缩或解压归档文件,无需单独调用 gzip gunzip |
| r | append | 将列出的文件添加到现有 tar 归档文件的末尾 |

tar 命令还有许多其他常用选项,例如:
- f filename :指定 tar 文件名
- k :保留旧文件(不被提取的文件覆盖)
- v :详细模式(运行时提供信息)
- z :使用 gzip 压缩/解压缩进行归档/提取
- M :多卷(表示可以使用多个软盘或磁带的归档文件)
- V :卷名(存储在 tar 文件中以供参考)

使用 tar 归档目录的示例

#pwd
/public/sharedfiles/me
#ls -l
total 27
--rwxrwxr--x   1 me       users       22843 Apr  1 20:40 README.txt
--rwxrwxr--x   1 me       me           1519 Mar 15 21:29 iousage
drwxrwxr--x   2 me       users        1024 Jun  8  1996 fileshare
lrwxrwxr--x   2 me       users           8 Dec 12 20:39 thtfil -> thisfile
#tar cf share.tar /public/sharedfiles/me
tar: removing leading / from absolute pathnames in the archive
#ls -l
total 28
--rwxrwxr--x   1 me       users       22843 Apr  1 20:40 README.txt
--rwxrwxr--x   1 me       me           1519 Mar 15 21:29 iousage
drwxrwxr--x   2 me       users        1024 Jun  8  1996 fileshare
--rwxrwxr--x   1 me       users       46058 Apr  1 20:40 share.tar
lrwxrwxr--x   2 me       users           8 Dec 12 20:39 thtfil -> thisfile
3. 使用 find 命令定位文件

find 命令可以根据文件类型、所有者、创建日期或其他文件属性查找文件。其基本语法为 #find pathname(s) to search search rule expression

示例 :查找当前目录及其子目录中所有扩展名为 .html 的文件

#find . -name ‘*.html’ -print

find 命令在系统维护中非常有用,可以根据文件所有权、文件大小或其他文件属性(如文件访问时间、文件类型或文件权限)定位文件。以下是一些常用的搜索规则:
| 表达式 | 类型 | 功能 |
| ---- | ---- | ---- |
| -atime/-mtime/-ctime | test | 测试文件是否在指定天数之前(+n)、之后(-n)或当天(n)创建 |
| -depth | option | 在检查目录本身的权限之前处理每个目录中的文件 |
| -exec command {} \; | action | 对传递给它的每个文件执行命令,命令中的花括号 {} 将被当前检查的文件替换,分号 ; 终止命令字符串,反斜杠 \ 用于转义 ; 以免被 shell 误解 |
| -group groupname | test | 测试文件是否由指定组拥有 |
| -name filename | test | 测试传递给它的文件名是否与指定文件名匹配 |
| -nouser | test | 测试是否存在没有关联用户的文件,用于查找可以归档或删除的孤立文件 |
| -ok command {} \; | action | 与 -exec 类似,但在对每个传递给它的文件执行命令之前提示用户 |
| -path pathname | test | 测试传递给它的文件路径是否与指定路径名匹配 |
| -prune | action | 跳过传递给它的目录(通常与 -path 一起使用, -path 标识要跳过的目录并将名称传递给 prune ) |
| -regex expression | test | 测试传递给它的文件名是否与正则表达式匹配 |
| -size nk | test | 测试传递给它的文件大小是否为 n KB(可以使用 +n 或 -n 表示大于或小于 n) |
| -type d | test | 测试文件是否为目录类型 |
| -user username | test | 测试文件是否由指定用户拥有 |
| -xdev | option | 指示 find 仅在当前设备上搜索(例如,仅在硬盘上) |

4. 根据文件访问时间定位文件

可以使用 find 命令根据文件的访问时间定位文件,例如查找过去 30 天未访问的设备文件:

#find /dev -atime +30 -print

若要更新文件的访问时间,可以使用 touch 命令:

#touch $HOME/*

然后可以使用 tar 命令根据访问时间选择要归档的文件:

#ls -l $HOME
total 2
--rwxrwxr--x   1 me       users       22843 Apr  1  9:40 README.txt
--rwxrwxr--x   1 me       me           1519 Apr  1  9:40 iousage
#tar -cvz -N DATE -f home.tar.gz $HOME
5. 使用 taper 进行备份

Linux 的某些版本包含由 Yusuf Nagree 开发的备份实用程序 taper 。如果未安装 taper 包,可以从 http://www.omen.net.au/~yusuf/ 免费下载最新版本。

启动 taper 时,需要指定备份设备类型,设备类型选项如下表所示:
| 设备指示符 | 助记符 | 描述 |
| ---- | ---- | ---- |
| z | zftape | 最新的软盘驱动器磁带驱动程序,如果有 zftape 设备驱动程序,建议使用 |
| f | ftape | 较旧的软盘驱动器磁带驱动程序,如果使用的 ftape 版本早于 3.0 版,则使用 |
| r | removable | 备份到软盘和其他可移动设备(如 Zip 驱动器)时使用 |
| s | scsi | 与 SCSI 磁带驱动器一起使用 |

使用 taper 进行备份的步骤
1. 确定要使用的备份设备,并确保有适当的设备驱动程序。
2. 使用适当的命令行指令启动 taper (如 taper -T z taper -T f 等),启动后可以使用 Preferences 菜单保存设备驱动程序信息。
3. 启动 taper 后,进入 Utilities 菜单。
4. 在 Utilities 菜单中,选择 Test Make Tape
5. Test Make Tape 可能会提示需要运行 mktape 实用程序,假设是新磁带,此时可以安全运行。
6. 选择 Back to Main Menu 选项。
7. 进入 Backup Module
8. 使用屏幕左上角的菜单系统选择要归档的文件和目录, taper 会在屏幕下半部分显示所选文件的列表。
9. 选择完所有需要包含在归档中的文件后,按 F 开始归档, taper 会创建归档并显示相关详细信息。
10. 可以记录归档的标题,用于标记磁带, taper 会将此信息记录在归档索引文件中。

graph LR
    A[确定备份设备和驱动] --> B[启动 taper]
    B --> C[进入 Utilities 菜单]
    C --> D[选择 Test Make Tape]
    D --> E{是否需要 mktape}
    E -- 是 --> F[运行 mktape]
    E -- 否 --> G[选择 Back to Main Menu]
    F --> G
    G --> H[进入 Backup Module]
    H --> I[选择要归档的文件和目录]
    I --> J[按 F 开始归档]
    J --> K[记录归档标题]
6. 使用软盘进行备份

软盘适用于小型备份,或需要将一些文件或目录物理传输到其他位置的情况。

操作步骤
1. 确定软盘驱动器的设备名称,通常是 /dev/fd0 ,可以通过尝试格式化或挂载软盘来验证。
2. 使用 fdformat 实用程序对软盘进行低级格式化:

#fdformat /dev/fd0H1440

使用 fdformat 时要小心,因为它会擦除软盘上的所有数据。在格式化之前,最好使用 mount ls 命令检查软盘是否为空。
3. 使用 mkfs 命令为软盘配置 ext2 文件系统:

#mkfs -t ext2 /dev/fd0 1440

这里的 1440 表示软盘包含 1,440 千字节的存储空间,即 1.44MB。
4. 使用默认挂载点 /mnt/floppy 挂载软盘:

#mount -t ext2 /dev/fd0 /mnt/floppy
  1. 使用 tar 命令将信息备份到软盘上:
#tar -cvfz /dev/fd0 files

通常,在使用软盘备份时,会使用 M 选项表示这是一个多卷备份:

#tar -cvzMf /dev/fd0 files

tar 会在需要更换软盘时提示,要确保标记每个软盘的磁盘顺序号,否则在恢复归档时可能会出现问题。

7. 使用可移动驱动器进行备份

若计划使用连接到软盘控制器的可移动磁带驱动器进行备份,需确定与磁带驱动器关联的设备文件。通常,磁带驱动器分为可重绕(由 /dev/rft0 /dev/rft1 等设备文件表示)和不可重绕(由 /dev/nrft0 /dev/nrft1 等设备文件表示)两种类型。可重绕磁带设备在 tar 完成向磁带写入归档后会自动倒带,适合仅用于一个归档文件的磁带;不可重绕磁带设备在 tar 完成后不会自动倒带,可在一个磁带上依次放置多个归档文件。

以下是使用不同类型磁带驱动器进行备份的示例:

# 使用可重绕磁带驱动器创建 /usr/doc 目录的压缩归档
#tar -cvzf /dev/rft0 /usr/doc
# 使用不可重绕磁带驱动器创建 /usr/src 目录的归档
#tar -cvzf /dev/nrft0 /usr/src
# 在不可重绕磁带驱动器上创建第二个归档
#tar -cvzf /dev/nrft0 /usr/lib

若要恢复第二个归档,需使用 mt 命令跳过磁带上的第一个归档文件:

#mt /dev/nrft0 fsf 1

若使用其他类型的驱动器进行备份,可将其使用的设备文件替换上述示例中的软盘磁带设备文件。例如,使用 SCSI 磁带设备时,可使用 /dev/st0 ;使用 SCSI 端口上的 Iomega Zip 驱动器时,可使用 /dev/sda1

graph LR
    A[确定驱动器类型] --> B{可重绕?}
    B -- 是 --> C[/dev/rft0 等]
    B -- 否 --> D[/dev/nrft0 等]
    C --> E[使用 tar 创建归档]
    D --> F[使用 tar 依次创建多个归档]
    F --> G[恢复时用 mt 跳过前一个归档]
8. 自动化增量备份

可以使用 find tar 命令自动备份自上次全系统备份以来发生更改的文件。全系统备份通常涉及备份自初始安装后创建或更改的所有内容,但对于大多数可从 Linux 主发行版 CD 重新加载的软件包,无需包含在全系统备份中。

以下是自动化增量备份的步骤:
1. 进行全系统备份:

# 备份整个系统
#tar -cvzMf /dev/rft0 /
# 选择性备份部分目录
#tar -cvzMf /dev/rft0 /etc /var /sbin /usr/local /home
  1. 记录上次备份的日期:
#ls -l lastarchive.tar | cut -f6-8 > lastarchive.date
  1. 使用 tar -N 选项进行增量备份:
#tar -cz -g archlog.txt -N DATE -V ‘latest backup’ /home
  1. 使用 find 命令查找需要备份的文件:
#find / -atime -1 -print > /home/backuplists/todaysfiles
#tar -cvz -f /dev/rft0 -T /home/backuplists/todaysfiles
  1. 使用 crontab 或 shell 脚本自动化备份过程:
# 使用 crontab 自动化备份
* 3 * * * find / -atime -1 -print > \
/home/backuplists/todaysfiles; mt -f /dev/rft0 rewind; \
tar -cvz -f /dev/rft0 -T /home/backuplists/todaysfiles
# 使用 shell 脚本自动化备份
* 3 * * * /home/backupscripts/todaysbu
9. 文件系统维护

定期清理系统中的不必要文件,不仅可以释放磁盘空间,还能让你熟悉系统目录结构和用户使用习惯。

9.1 删除不必要的文件

可以使用 find 命令搜索不再需要的文件,并从命令行删除它们,也可以使用自动化过程(如 crontab 条目或 shell 脚本)进行删除。但在删除之前,务必确保已备份可能需要的文件。

以下是一个示例,搜索属于不再有权限访问系统的用户的文件,将其归档到磁带并删除原始文件:

#find / -user tb -print > tbfiles
#tar -cvz -f tbfile.tar.gz -T tbfiles
#find / -user tb -print0 | xargs -r0 rm

若要删除目录,可使用以下命令:

#find / -user tb -print0 | xargs -r0 rmdir
9.2 恢复已删除的文件

在 Linux 中,恢复已删除文件的唯一方法是使用备份系统(如 tar taper )。可以使用 tar 命令检查归档文件中是否存在丢失的文件,并将其恢复到指定目录:

# 检查归档文件中是否存在丢失的文件
#tar -tvz -f monthlybackup.tar.gz lostfile(s)
# 创建一个用于恢复丢失文件的目录
#cd /home/me/restored_lostfiles
# 从归档文件中提取丢失的文件
#tar -xvz -f monthlybackup.tar.gz lostfile(s)

确认恢复的文件没有冲突或文件属性问题后,可将其移回原始位置。

10. 最大化磁盘空间

一般来说,最好不要让硬盘的可用空间低于硬盘总容量的 25 - 30%。以下是一些监控和回收磁盘空间的方法。

10.1 系统清理

Linux 内核和其他进程运行时会生成一些临时文件,有时需要手动清理。可以使用 df du 命令检查磁盘使用情况:

# 查看所有挂载分区的磁盘使用情况
[jray@pointy jray]$ df -h
# 查看单个文件或目录的磁盘使用情况
[root@pointy sbin]# du -h

还可以使用 find 命令查找大文件,并使用 crontab 定期检查:

# 查找大于 1MB 的文件并记录到日志文件
#find -size +1000k -print > /home/me/filemaint/bigfilelist
# 每周一早上 8 点检查大文件
* 8 * * Mon find -size +1000k -print

此外, /etc/syslog.conf 文件记录了系统日志的配置,许多系统日志文件存储在 /var/log 目录中,可检查该目录中是否有过大的文件。同时, /tmp /var/tmp 目录也可能会积累大量临时文件,可根据情况清理。

10.2 压缩未使用的文档和目录

对于暂时不需要使用的文件和目录,可以使用 tar 命令进行压缩归档,以释放磁盘空间。例如:

# 压缩 /projects/DoomB 等目录
#tar -cvz -f /dev/rft0 /projects/DoomB /home/lib/DoomB /usr/local/DoomB_graphics

通过以上系统备份、文件系统维护和磁盘空间管理的方法,可以确保 Linux 系统的稳定运行和数据安全。在实际操作中,应根据系统的具体情况选择合适的方法和策略。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值