鸟哥的linux私房菜学习笔记2

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
在某些服务被关到特定目录下时(chroot),就需要这样做了。此时这个 mknod 就得要知道如何操作才行!
[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/
# 测试完成!记得将数据给他卸除!
-o options 主要用来描述设备或档案的挂接方式。常用的参数有:
loop:用来把一个文件当成硬盘分区挂接上系统
ro:采用只读方式挂接设备
rw:采用读写方式挂接设备
iocharset:指定访问文件系统所用字符集


非常方便吧!如此一来我们不需要将这个文件刻录成为光盘或者是 DVD 就能够读取内部的数据了!换句话说,你也可以在这个文件内『动手脚』去修改文件的!这也是为什么很多映象档提供后,还得要提供验证码 (MD5)给使用者确认该映象档没有问题!

使用物理分区构建swap

创建 swap 分割槽的方式也是非常的简单的!透过底下几个步骤就搞定啰:

  1. 分割:先使用 fdisk 在你的磁盘中分割出一个分割槽给系统作为 swap 。由于 Linux 的 fdisk 默认会将分割槽的 ID 配置为 Linux 的文件系统,所以你可能还得要配置一下 system ID 就是了。
  2. 格式化:利用创建 swap 格式的『mkswap 装置文件名』就能够格式化该分割槽成为 swap 格式啰
  3. 使用:最后将该 swap 装置启动,方法为:『swapon 装置文件名』。
  4. 观察:最终透过 free 这个命令来观察一下内存的用量吧!

    1. <p>1.先进行分割的行为啰!</p>[root@www ~]# <span style="color:#FF0000;">fdisk</span> /dev/hdc  
    2. Command (m for help): n  
    3. First cylinder (2303-5005, default 2303):  <==这里按[enter]  
    4. Using default value 2303  
    5. Last cylinder or +size or +sizeM or +sizeK (2303-5005, default 5005): +256M  
    6.   
    7. Command (m for help): p  
    8.   
    9.    Device Boot      Start         End      Blocks   Id  System  
    10. .....中间省略.....  
    11. /dev/hdc6            2053        2302     2008093+  83  Linux  
    12. /dev/hdc7            2303        2334      257008+  83  Linux <==新增的项目  
    13.   
    14. Command (m for help):<span style="color:#FF0000;"> t             <==修改系统 ID</span>  
    15. Partition number (1-7): 7           <==从上结果看到的,七号partition  
    16. Hex code (type L to list codes): <span style="color:#FF0000;">82 <==改成 swap 的 ID</span>  
    17. Changed system type of partition 7 to 82 (Linux swap / Solaris)  
    18.   
    19. Command (m for help): p  
    20.   
    21.    Device Boot      Start         End      Blocks   Id  System  
    22. .....中间省略.....  
    23. /dev/hdc6            2053        2302     2008093+  83  Linux  
    24. /dev/hdc7            2303        2334      257008+  82  Linux swap / Solaris  
    25.   
    26. Command (m for help): w  
    27. # 此时就将 partition table 升级了!  
    28.   
    29. [root@www ~]# <span style="color:#FF0000;">partprobe</span>  
    30. # 这个玩意儿很重要的啦!不要忘记让核心升级 partition table 喔!  
    31.   
    32.   
    33.     2. 开始建置 swap 格式  
    34.   
    35. [root@www ~]#<span style="color:#FF0000;"> mkswap /dev/hdc7</span>  
    36. Setting up swapspace version 1, size = 263172 kB  <==非常快速!  
    37.   
    38.   
    39.     3. 开始观察与加载看看吧!  
    40.   
    41. [root@www ~]# free  
    42.              total       used       free     shared    buffers     cached  
    43. Mem:        742664     684592      58072          0      43820     497144  
    44. -/+ buffers/cache:     143628     599036  
    45. Swap:      1020088         96    1019992  
    46. # 我有 742664K 的物理内存,使用 684592K 剩余 58072K ,使用掉的内存有  
    47. # 43820K / 497144K 用在缓冲/缓存的用途中。  
    48. # 至于 swap 已经存在了 1020088K 啰!这样会看了吧?!  
    49.   
    50. [root@www ~]# <span style="color:#FF0000;">swapon /dev/hdc7</span>  
    51. [root@www ~]# free  
    52.              total       used       free     shared    buffers     cached  
    53. Mem:        742664     684712      57952          0      43872     497180  
    54. -/+ buffers/cache:     143660     599004  
    55. Swap:      1277088         96    1276992  <==有添加啰!看到否?  
    56.   
    57. [root@www ~]# <span style="color:#FF0000;">swapon -s</span>  
    58. Filename                 Type            Size    Used    Priority  
    59. /dev/hdc5                partition       1020088 96      -1  
    60. /dev/hdc7                partition       257000  0       -2  
    61. <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
这样一个 128MB 的文件就建置妥当。若忘记上述的各项参数的意义,请回前一小节查阅一下啰!


  • 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
从上面的特殊字体部分,那就是每个文件所使用掉 block 的容量!举例来说,那个 crontab 虽然仅有 255bytes ,不过他却占用了两个 block (每个 block 为 4K)


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

    实际处理的方法其实还挺简单的!我们可以这样做看看:

    1. 先替该目录制作一些数据,亦即复制一些东西过去吧!
      cp -a /etc /boot /srv/myproject

    2. 开始进行 dump ,记得,一开始是使用 level 0 的完整备份喔!
      mkdir /backups
      dump -0u -j -f /backups/myproject.dump /srv/myproject

      上面多了个 -j 的选项,目的是为了要进行压缩,减少备份的数据量。

    3. 尝试将 /srv/myproject 这个文件系统加大,将 /var/log/ 的数据复制进去吧!
      cp -a /var/log/ /srv/myproject
      此时原本的 /srv/myproject 已经被改变了!继续进行备份看看!

    4. 将 /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 以刚刚的备份数据还原,此时该如何处理呢?你可以这样做的:

    1. 先将 /srv/myproject 卸载,并且将该 partition 重新格式化!
      umount /dev/hdc6
      mkfs -t ext3 /dev/hdc6


    2. 重新挂载原本的 partition ,此时该目录内容应该是空的!
      mount -a
      你可以自行使用 df 以及 ls -l /srv/myproject 查阅一下该目录的内容,是空的啦!

    3. 将完整备份的 level 0 的文件 /backups/myproject.dump 还原回来:
      cd /srv/myproject
      restore -r -f /backups/myproject.dump

      此时该目录的内容为第一次备份的状态!还需要进行后续的处理才行!

    4. 将后续的 level 1 的备份也还原回来:
      cd /srv/myproject
      restore -r -f /backups/myproject.dump.1

      此时才是恢复到最后一次备份的阶段!如果还有 level 2, level 3 时,就得要一个一个的依序还原才行!
原文地址:https://www.cnblogs.com/jonathanyue/p/9301317.html