P198
spuer block(P202合并):记录此文件系统的整体信息(inode/block的大小,总量、使用量、剩余量),以及文件系统的格式与相关信息(文件系统挂载时间、最近一次写入数据时间、最近一次检验磁盘fsck时间、一个validbit数值:0系统已挂载,1未挂载)
inode:记录文件的权限与属性,一个文件占用一个inode,同时记录此文件的数据所在的block号码
block:记录文件的内容,一个文件可占用多个block
P200
block group的概念
data block: ext2文件系统支持的block大小有三种 1/2/4KB
inodetable记录的内容:权限(rwx)、属性(owner/group)、文件大小 、ctime/atime/mtime、定义文件特性的flag(如SetUid)、该文件真正内容的指向(pointer)
每个inode大小固定为128bytes
每个文件占用一个inode 所以文件数量与inode数量有关
读取文件时先找到inode,并分析inode所记录的权限是否与用户符合,符合才能开始实际读取block的内容
间接,双间接,三间接:以block扩展作为号码记录
P203
一个文件系统仅有一个superblock,但每个block group内可以有superblock的内容作为第一个block group的备份
flie system description:描述每个block group 的起始block号码,以及说明每个区段(superblock /bitmap/ inodemap /data block)分别介于哪一个block号码之间
block bitmap:哪些block是空的
inode bitmap:哪些inode是空的
dump2fs: superblock与file system description的信息(每个block group的信息)
P204
目录在ext2文件系统如何记录数据:新建目录时,ext2分配一个inode与至少一个block给它,inode记录该目录的权限与属性,并记录分配到的那块block号码;block则记录这个目录下的文件名与该文件名占用的inode号码数据(inode本身不记录文件名,文件名记录是在目录的block中,因此文件的增/删/重命名与目录的w权限有关;那么因为文件名是记录在目录的block中,因此当我们要读取某个文件时,就务必经过它上面各级目录的inode与block,然后才能找到真正待读文件的inode号码以读取数据)
文件在ext2中如何记录数据:新建一般文件是,ext2分配一个inode与相对于该文件大小的block数量给该文件
P207
数据存放区域:inode table/data block
中间数据(meta data):superblock/block bitmap/inode bitmap(每次增删改都可能影响这三部分数据)
P208
文件系统最顶层的目录的inode一般为2
P210
df -h human-readable -i inode(不用硬盘容量来显示) 读取的主要范围是superblock 特别留意根目录的剩余容量,因为所有数据都是由根目录衍生出来的。
df -a 看到/proc的结果为0的原因: 是Linux系统所需要加载的系统数据,而且是挂载在虚拟内存中的,所以没有占用硬盘空间
P212
du:与df不同,会直接到文件系统去查找所有的文件数据 du -S 不包括子目录下的总计 -s列出总量,不列出每个各别的目录占用容量
P213
hardlink 在某个目录下新建一条文件名链接到某inode号码的关联记录(ls -l filename 第二列比原来多1 p170) 好处:将任何一个文件名删除,inode与block还是存在
hardlink只是在某个目录下的block内多写入一个关联数据,不会增加inode也不会耗用block数量
hard link的限制: 不能跨文件系统 不能连接到目录(因为复杂度高)
symbolic link: 创建一个独立的文件,这个文件会让数据的读取指向它连接的那个文件的文件名。会占用掉inode与block
ln不加参数是hard link ,加-s是symbolic link
新建一个目录时,新的目录连接数为2,而上层目录的连接数会增加1(/tmp/testing /tmp/testing/. /tmp/testing/..)
fdisk:调整分区表 -l输出后面接的设备所有的分区内容,若仅有fdisk -l 时,系统会把整个系统内能够找到的设备分区均列出来。(识别U盘可以用到)
partprobe 强制让内核重新找一次分区表(当fdisk 输入w后系统提示重启才能生效,此时用partprobe避免重启)
mkfs [-t 文件系统格式] 设备文件名 磁盘格式化
mke2fs :Ext2/Ext3的公用程序 -b block大小(每个block大小) -i block大小(多少容量给一个inode) -L 卷标 -c(检查磁盘错误)-j(不带-j是ext2,带-j是ext3)
fsck:正常情况下使用此命令,可能损坏系统;被检查的分区要在卸载状态;当fsck检查文件系统后,有问题的数据会被放置到lost+found目录中。
P226
作为挂载点的目录理论上应当为空目录。如果非空,挂载后原先的内容会被隐藏,新分区被卸载后才会再次显示出来。
mount通常不需要参数-t(指定欲挂载的文件系统类型):文件系统几乎都有superblock,linux可以通过分析superblock搭配linux自己的驱动程序去测试挂载,如果成功挂载了,就立刻使用该类型的文件系统挂载起来。参考的文件:/etc/filesystems系统指定的测试挂载文件系统类型 /proc/filesystems linux系统已经加载的文件系统类型。
如何知道linux有没有相关文件系统类型的驱动程序:/lib/modules/$(uname -r)/kernel/fs/ 文件系统的驱动程序所在目录
/dev/cdrom是连接文件,光驱一旦挂载后就无法退出光盘,除非将它卸载
重新挂载根目录:mount -o remount, rw, auto / (在单用户模式下,根目录通常被系统挂载为只读,可用此命令)
在不支持symboliclink的程序中,利用mount --bind来将某个目录挂载到另一个目录去(并不是挂载文件系统,而是额外挂载某个目录)
范例七:将 /home 这个目录暂时挂载到 /mnt/home 底下: [root@www ~]# mkdir /mnt/home [root@www ~]# mount --bind /home /mnt/home [root@www ~]# ls -lid /home/ /mnt/home 2 drwxr-xr-x 6 root root 4096 Sep 29 02:21 /home/ 2 drwxr-xr-x 6 root root 4096 Sep 29 02:21 /mnt/home [root@www ~]# mount -l /home on /mnt/home type none (rw,bind)
umount:卸除的方式,可以跟设备文件名或挂载点
[root@www ~]# cd /media/cdrom
[root@www cdrom]# umount /media/cdrom
umount: /media/cdrom: device is busy
umount: /media/cdrom: device is busy
由于你目前正在 /media/cdrom/ 的目录内,也就是说其实『你正在使用该文件系统』的意思! 所以自然无法卸除这个装置!那该如何是好?就『离开该文件系统的挂载点』即可。
使用 Label name 进行挂载的方法:
除了磁盘的装置文件名之外,其实我们可以使用文件系统的标头(label)名称来挂载喔! 举例来说,我们刚刚卸除的 /dev/hdc6 标头名称是『vbird_logical』,你也可以使用dumpe2fs 这个命令来查询文件系统的lable!然后就这样做即可:
范例九:找出 /dev/hdc6 的 label name,并用 label 挂载到 /mnt/hdc6 [root@www ~]# dumpe2fs -h /dev/hdc6 Filesystem volume name: vbird_logical .....底下省略..... # 找到啦!标头名称为 vbird_logical 啰! [root@www ~]# mount -L "vbird_logical" /mnt/hdc6 |
这种挂载的方法有一个很大的好处:『系统不必知道该文件系统所在的接口与磁盘文件名!』
P231
在 Linux 底下所有的装置都以文件来代表吧!但是那个文件如何代表该装置呢?很简单!就是透过文件的 major 与 minor 数值来替代的~所以,那个 major 与 minor 数值是有特殊意义的,不是随意配置的喔!举例来说,在鸟哥的这个测试机当中,那个用到的磁盘 /dev/hdc 的相关装置代码如下:
[root@www ~]# ll /dev/hdc* brw-r----- 1 root disk 22, 0 Oct 24 15:55 /dev/hdc brw-r----- 1 root disk 22, 1 Oct 20 08:47 /dev/hdc1 brw-r----- 1 root disk 22, 2 Oct 20 08:47 /dev/hdc2 brw-r----- 1 root disk 22, 3 Oct 20 08:47 /dev/hdc3 brw-r----- 1 root disk 22, 4 Oct 24 16:02 /dev/hdc4 brw-r----- 1 root disk 22, 5 Oct 20 16:46 /dev/hdc5 brw-r----- 1 root disk 22, 6 Oct 25 01:33 /dev/hdc6 |
上表当中 22 为主要装置代码 (Major) 而 0~6 则为次要装置代码 (Minor)。我们的 Linux 核心认识的装置数据就是透过这两个数值来决定的!举例来说,常见的硬盘文件名 /dev/hda 与 /dev/sda 装置代码如下所示:
磁盘文件名 | Major | Minor |
/dev/hda | 3 | 0~63 |
/dev/hdb | 3 | 64~127 |
/dev/sda | 8 | 0-15 |
/dev/sdb | 8 | 16-31 |
[root@www ~]# mknod 装置文件名 [bcp] [Major] [Minor] 选项与参数: 装置种类: b :配置装置名称成为一个周边储存设备文件,例如硬盘等; c :配置装置名称成为一个周边输入设备文件,例如鼠标/键盘等; p :配置装置名称成为一个 FIFO 文件; Major :主要装置代码; Minor :次要装置代码; 范例一:由上述的介绍我们知道 /dev/hdc10 装置代码 22, 10,请创建并查阅此装置 [root@www ~]# mknod /dev/hdc10 b 22 10 [root@www ~]# ll /dev/hdc10 brw-r--r-- 1 root root 22, 10 Oct 26 23:57 /dev/hdc10 # 上面那个 22 与 10 是有意义的,不要随意配置啊! 范例二:创建一个 FIFO 文件,档名为 /tmp/testpipe [root@www ~]# mknod /tmp/testpipe p [root@www ~]# ll /tmp/testpipe prw-r--r-- 1 root root 0 Oct 27 00:00 /tmp/testpipe # 注意啊!这个文件可不是一般文件,不可以随便就放在这里! # 测试完毕之后请删除这个文件吧!看一下这个文件的类型!是 p 喔!^_^
e2lable:修改Label
关于用lable与设备文件名的比较:
- 优点:不论磁盘文件名怎么变,不论你将硬盘插在哪个 IDE / SATA 接口,由于系统是透过 Label ,所以,磁盘插在哪个接口将不会有影响;
- 缺点:如果插了两颗硬盘,刚好两颗硬盘的 Label 有重复的,那就惨了~因为系统可能会无法判断哪个磁盘分区槽才是正确的!
[root@www ~]# e2label 装置名称 新的Label名称 范例一:将 /dev/hdc6 的标头改成 my_test 并观察是否修改成功? [root@www ~]# dumpe2fs -h /dev/hdc6 Filesystem volume name: vbird_logical <==原本的标头名称 .....底下省略..... [root@www ~]# e2label /dev/hdc6 "my_test" [root@www ~]# dumpe2fs -h /dev/hdc6 Filesystem volume name: my_test <==改过来啦! .....底下省略.....P234
开机就挂载:/etc/fstab 用mount时,所有的参数写入这个文件
/etc/fstab 是启动时的配置文件,不过,实际 filesystem 的挂载是记录到 /etc/mtab 与 /proc/mounts 这两个文件当中的。每次我们在更动 filesystem 的挂载时,也会同时更动这两个文件喔!但是,万一发生您在 /etc/fstab 输入的数据错误,导致无法顺利启动成功,而进入单人维护模式当中,那时候的 / 可是 read only 的状态,当然您就无法修改 /etc/fstab ,也无法升级 /etc/mtab 啰~那怎么办?没关系,可以利用底下这一招:
[root@www ~]# mount -n -o remount,rw /
P237
挂载光盘/DVD映象文件
下载了 Linux 或者是其他所需光盘/DVD的映象文件后,难道一定需要刻录成为光盘才能够使用该文件里面的数据吗?当然不是啦!我们可以透过 loop 装置来挂载的!
那要如何挂载呢?鸟哥将整个 CentOS 5.2 的 DVD 映象档捉到测试机上面,然后利用这个文件来挂载给大家参考看看啰!
[root@www ~]# ll -h /root/centos5.2_x86_64.iso -rw-r--r-- 1 root root 4.3G Oct 27 17:34 /root/centos5.2_x86_64.iso # 看到上面的结果吧!这个文件就是映象档,文件非常的大吧! [root@www ~]# mkdir /mnt/centos_dvd [root@www ~]# mount -o loop /root/centos5.2_x86_64.iso /mnt/centos_dvd [root@www ~]# df Filesystem 1K-blocks Used Available Use% Mounted on /root/centos5.2_x86_64.iso 4493152 4493152 0 100% /mnt/centos_dvd # 就是这个项目! .iso 映象文件内的所有数据可以在 /mnt/centos_dvd 看到! [root@www ~]# ll /mnt/centos_dvd total 584 drwxr-xr-x 2 root root 522240 Jun 24 00:57 CentOS <==瞧!就是DVD的内容啊! -rw-r--r-- 8 root root 212 Nov 21 2007 EULA -rw-r--r-- 8 root root 18009 Nov 21 2007 GPL drwxr-xr-x 4 root root 2048 Jun 24 00:57 images .....底下省略..... [root@www ~]# umount /mnt/centos_dvd/ # 测试完成!记得将数据给他卸除! |
loop:用来把一个文件当成硬盘分区挂接上系统
ro:采用只读方式挂接设备
rw:采用读写方式挂接设备
iocharset:指定访问文件系统所用字符集
非常方便吧!如此一来我们不需要将这个文件刻录成为光盘或者是 DVD 就能够读取内部的数据了!换句话说,你也可以在这个文件内『动手脚』去修改文件的!这也是为什么很多映象档提供后,还得要提供验证码 (MD5)给使用者确认该映象档没有问题!
使用物理分区构建swap创建 swap 分割槽的方式也是非常的简单的!透过底下几个步骤就搞定啰:
- 分割:先使用 fdisk 在你的磁盘中分割出一个分割槽给系统作为 swap 。由于 Linux 的 fdisk 默认会将分割槽的 ID 配置为 Linux 的文件系统,所以你可能还得要配置一下 system ID 就是了。
- 格式化:利用创建 swap 格式的『mkswap 装置文件名』就能够格式化该分割槽成为 swap 格式啰
- 使用:最后将该 swap 装置启动,方法为:『swapon 装置文件名』。
- 观察:最终透过 free 这个命令来观察一下内存的用量吧!
-
- <p>1.先进行分割的行为啰!</p>[root@www ~]# <span style="color:#FF0000;">fdisk</span> /dev/hdc
- Command (m for help): n
- First cylinder (2303-5005, default 2303): <==这里按[enter]
- Using default value 2303
- Last cylinder or +size or +sizeM or +sizeK (2303-5005, default 5005): +256M
- Command (m for help): p
- Device Boot Start End Blocks Id System
- .....中间省略.....
- /dev/hdc6 2053 2302 2008093+ 83 Linux
- /dev/hdc7 2303 2334 257008+ 83 Linux <==新增的项目
- Command (m for help):<span style="color:#FF0000;"> t <==修改系统 ID</span>
- Partition number (1-7): 7 <==从上结果看到的,七号partition
- Hex code (type L to list codes): <span style="color:#FF0000;">82 <==改成 swap 的 ID</span>
- Changed system type of partition 7 to 82 (Linux swap / Solaris)
- Command (m for help): p
- Device Boot Start End Blocks Id System
- .....中间省略.....
- /dev/hdc6 2053 2302 2008093+ 83 Linux
- /dev/hdc7 2303 2334 257008+ 82 Linux swap / Solaris
- Command (m for help): w
- # 此时就将 partition table 升级了!
- [root@www ~]# <span style="color:#FF0000;">partprobe</span>
- # 这个玩意儿很重要的啦!不要忘记让核心升级 partition table 喔!
- 2. 开始建置 swap 格式
- [root@www ~]#<span style="color:#FF0000;"> mkswap /dev/hdc7</span>
- Setting up swapspace version 1, size = 263172 kB <==非常快速!
- 3. 开始观察与加载看看吧!
- [root@www ~]# free
- total used free shared buffers cached
- Mem: 742664 684592 58072 0 43820 497144
- -/+ buffers/cache: 143628 599036
- Swap: 1020088 96 1019992
- # 我有 742664K 的物理内存,使用 684592K 剩余 58072K ,使用掉的内存有
- # 43820K / 497144K 用在缓冲/缓存的用途中。
- # 至于 swap 已经存在了 1020088K 啰!这样会看了吧?!
- [root@www ~]# <span style="color:#FF0000;">swapon /dev/hdc7</span>
- [root@www ~]# free
- total used free shared buffers cached
- Mem: 742664 684712 57952 0 43872 497180
- -/+ buffers/cache: 143660 599004
- Swap: 1277088 96 1276992 <==有添加啰!看到否?
- [root@www ~]# <span style="color:#FF0000;">swapon -s</span>
- Filename Type Size Used Priority
- /dev/hdc5 partition 1020088 96 -1
- /dev/hdc7 partition 257000 0 -2
- # <span style="color:#FF0000;">上面列出目前使用的 swap 装置有哪些的意思!</span>
P240
使用文件构建swap
如果是在实体分割槽无法支持的环境下,此时前一小节提到的 loop 装置建置方法就派的上用场啦!与实体分割槽不一样的只是利用 dd 去建置一个大文件而已。多说无益,我们就再透过文件建置的方法创建一个128 MB 的内存置换空间吧!
- 1. 使用 dd 这个命令来新增一个 128MB 的文件在 /tmp 底下:
[root@www ~]# dd if=/dev/zero of=/tmp/swap bs=1M count=128 128+0 records in 128+0 records out 134217728 bytes (134 MB) copied, 1.7066 seconds, 78.6 MB/s [root@www ~]# ll -h /tmp/swap -rw-r--r-- 1 root root 128M Oct 28 15:33 /tmp/swap |
- 2. 使用 mkswap 将 /tmp/swap 这个文件格式化为 swap 的文件格式:
[root@www ~]# mkswap /tmp/swap Setting up swapspace version 1, size = 134213 kB # 这个命令下达时请『特别小心』,因为下错字节控制,将可能使您的文件系统挂掉! |
- 3. 使用 swapon 来将 /tmp/swap 启动啰!
[root@www ~]# free total used free shared buffers cached Mem: 742664 450860 291804 0 45584 261284 -/+ buffers/cache: 143992 598672 Swap: 1277088 96 1276992 [root@www ~]# swapon /tmp/swap [root@www ~]# free total used free shared buffers cached Mem: 742664 450860 291804 0 45604 261284 -/+ buffers/cache: 143972 598692 Swap: 1408152 96 1408056 [root@www ~]# swapon -s Filename Type Size Used Priority /dev/hdc5 partition 1020088 96 -1 /dev/hdc7 partition 257000 0 -2 /tmp/swap file 131064 0 -3 |
- 4. 使用 swapoff 关掉 swap file
[root@www ~]# swapoff /tmp/swap [root@www ~]# swapoff /dev/hdc7 [root@www ~]# free total used free shared buffers cached Mem: 742664 450860 291804 0 45660 261284 -/+ buffers/cache: 143916 598748 Swap: 1020088 96 1019992 <==回复成最原始的样子了!
P243
当你使用 ls -l 去查询某个目录下的数据时,第一行都会出现一个『total』的字样!那是啥东西?其实那就是该目录下的所有数据所耗用的实际 block 数量 * block 大小的值。我们可以透过 ll -s 来观察看看上述的意义:
[root@www ~]# ll -s total 104 8 -rw------- 1 root root 1474 Sep 4 18:27 anaconda-ks.cfg 8 -rw-r--r-- 2 root root 255 Jan 6 2007 crontab 4 lrwxrwxrwx 1 root root 12 Oct 22 13:58 crontab2 -> /etc/crontab 48 -rw-r--r-- 1 root root 42304 Sep 4 18:26 install.log 12 -rw-r--r-- 1 root root 5661 Sep 4 18:25 install.log.syslog 4 -rw-r--r-- 1 root root 0 Sep 27 00:25 test1 8 drwxr-xr-x 2 root root 4096 Sep 27 00:25 test2 4 -rw-rw-r-- 1 root root 0 Sep 27 00:36 test3 8 drwxrwxr-x 2 root root 4096 Sep 27 00:36 test4 |
P244
parted: 虽然你可以使用 fdisk 很快速的将你的分割槽切割妥当,不过 fdisk 却无法支持到高于 2TB 以上的分割槽!此时就得需要 parted 来处理了。
P245
- 磁盘的使用必需要经过:分割、格式化与挂载,分别惯用的命令为:fdisk, mkfs, mount三个命令
- 启动自动挂载可参考/etc/fstab之配置,配置完毕务必使用 mount -a 测试语法正确否;
P252
[root@www ~]# gzip [-cdtv#] 档名 [root@www ~]# zcat 档名.gz 选项与参数: -c :将压缩的数据输出到萤幕上,可透过数据流重导向来处理; -d :解压缩的参数; -t :可以用来检验一个压缩档的一致性~看看文件有无错误; -v :可以显示出原文件/压缩文件的压缩比等资讯; -# :压缩等级,-1 最快,但是压缩比最差、-9 最慢,但是压缩比最好!默认是 -6 范例一:将 /etc/man.config 复制到 /tmp ,并且以 gzip 压缩 [root@www ~]# cd /tmp [root@www tmp]# cp /etc/man.config . [root@www tmp]# gzip -v man.config man.config: 56.1% -- replaced with man.config.gz [root@www tmp]# ll /etc/man.config /tmp/man* -rw-r--r-- 1 root root 4617 Jan 6 2007 /etc/man.config -rw-r--r-- 1 root root 2684 Nov 10 17:24 /tmp/man.config.back.Z -rw-r--r-- 1 root root 2057 Nov 10 17:14 /tmp/man.config.gz <==gzip压缩比较佳
范例三:将范例一的文件解压缩 [root@www tmp]# gzip -d man.config.gz # 不要使用 gunzip 这个命令,不好背!使用 gzip -d 来进行解压缩! # 与 gzip 相反, gzip -d 会将原本的 .gz 删除,产生原本的 man.config 文件。
P254
tar: 将多个文件或目录包成一个大文件的命令功能。前一小节谈到的命令大多仅能针对单一文件来进行压缩。
- cvf create verbose filename 压 缩:tar -jcv -f filename.tar.bz2 要被压缩的文件或目录名称
- tvf list 查 询:tar -jtv -f filename.tar.bz2
- xvf extract f解压缩:tar -jxv -f filename.tar.bz2 -C 欲解压缩的目录
tar 的选项与参数非常的多!我们只讲几个常用的选项,更多选项您可以自行 man tar 查询罗!
[root@www ~]# tar [-j|-z] [cv] [-f 创建的档名] filename... <==打包与压缩 [root@www ~]# tar [-j|-z] [tv] [-f 创建的档名] <==察看档名 [root@www ~]# tar [-j|-z] [xv] [-f 创建的档名] [-C 目录] <==解压缩 选项与参数: -c :创建打包文件,可搭配 -v 来察看过程中被打包的档名(filename) -t :察看打包文件的内容含有哪些档名,重点在察看『档名』就是了; -x :解打包或解压缩的功能,可以搭配 -C (大写) 在特定目录解开 特别留意的是, -c, -t, -x 不可同时出现在一串命令列中。 -j :透过 bzip2 的支持进行压缩/解压缩:此时档名最好为 *.tar.bz2 -z :透过 gzip 的支持进行压缩/解压缩:此时档名最好为 *.tar.gz -v :在压缩/解压缩的过程中,将正在处理的档名显示出来! -f filename:-f 后面要立刻接要被处理的档名!建议 -f 单独写一个选项罗! -C 目录 :这个选项用在解压缩,若要在特定目录解压缩,可以使用这个选项。 其他后续练习会使用到的选项介绍: -p :保留备份数据的原本权限与属性,常用於备份(-c)重要的配置档 -P :保留绝对路径,亦即允许备份数据中含有根目录存在之意; --exclude=FILE:在压缩的过程中,不要将 FILE 打包!
P259
dump: 备份
restore:恢复
P267
mkisofs:新建镜像文件
cdrecord: 光盘刻录工具
dd:
[root@www ~]# dd if="input_file" of="output_file" bs="block_size" \ > count="number" 选项与参数: if :就是 input file 罗~也可以是装置喔! of :就是 output file 喔~也可以是装置; bs :规划的一个 block 的大小,若未指定则默认是 512 bytes(一个 sector 的大小) count:多少个 bs 的意思。你可以说, tar 可以用来备份关键数据,而 dd 则可以用来备份整颗 partition 或整颗 disk ( 包括了cp和tar不能复制的boot sector 的区块),很不错啊~
P270
cpio :cpio 可以备份任何东西,包括装置设备文件。不过 cpio 有个大问题,那就是 cpio 不会主动的去找文件来备份!啊!那怎办?所以罗,一般来说, cpio 得要配合类似find等可以找到档名的命令来告知 cpio 该被备份的数据在哪里啊!
- 备份:find / | cpio -ocvB > /dev/st0
- 还原:cpio -idvc < /dev/st0
P273
- 情境模拟题二:你想要逐时备份 /srv/myproject 这个目录内的数据,又担心每次备份的资讯太多,因此想要使用 dump 的方式来逐一备份数据到 /backups 这个目录下。该如何处理?
- 目标:了解到 dump 以及各个不同 level 的作用;
- 前提:被备份的数据为单一 partition ,亦即本例中的 /srv/myproject
- 需求:/srv/myproject 为单一 filesystem ,且在 /etc/fstab 内此挂载点的 dump 栏位为 1
实际处理的方法其实还挺简单的!我们可以这样做看看:
- 先替该目录制作一些数据,亦即复制一些东西过去吧!
cp -a /etc /boot /srv/myproject
- 开始进行 dump ,记得,一开始是使用 level 0 的完整备份喔!
mkdir /backups
dump -0u -j -f /backups/myproject.dump /srv/myproject
上面多了个 -j 的选项,目的是为了要进行压缩,减少备份的数据量。
- 尝试将 /srv/myproject 这个文件系统加大,将 /var/log/ 的数据复制进去吧!
cp -a /var/log/ /srv/myproject
此时原本的 /srv/myproject 已经被改变了!继续进行备份看看!
- 将 /srv/myproject 以 level 1 来进行备份:
dump -1u -j -f /backups/myproject.dump.1 /srv/myproject (-u将这次dump的时间记录到/etc/dumpdateS文件中,-j加入bzip2的支持,-f 后面接file)
ls -l /backups
你应该就会看到两个文件,其中第二个文件 (myproject.dump.1) 会小的多!这样就搞定罗备份数据!
- 情境模拟三:假设过了一段时间后,你的 /srv/myproject 变的怪怪的,你想要将该 filesystem 以刚刚的备份数据还原,此时该如何处理呢?你可以这样做的:
- 先将 /srv/myproject 卸载,并且将该 partition 重新格式化!
umount /dev/hdc6
mkfs -t ext3 /dev/hdc6
- 重新挂载原本的 partition ,此时该目录内容应该是空的!
mount -a
你可以自行使用 df 以及 ls -l /srv/myproject 查阅一下该目录的内容,是空的啦!
- 将完整备份的 level 0 的文件 /backups/myproject.dump 还原回来:
cd /srv/myproject
restore -r -f /backups/myproject.dump
此时该目录的内容为第一次备份的状态!还需要进行后续的处理才行!
- 将后续的 level 1 的备份也还原回来:
cd /srv/myproject
restore -r -f /backups/myproject.dump.1
此时才是恢复到最后一次备份的阶段!如果还有 level 2, level 3 时,就得要一个一个的依序还原才行!
- 先将 /srv/myproject 卸载,并且将该 partition 重新格式化!