鸟哥私房菜2

Linux 文件系统的运行:

将文件系统与目录树结合的动作我们称为『挂载』。 关于挂载的一些特性我们在第三章稍微提过, 重点是:挂载点一定是目录,该目录为进入该文件系统的入口。

 

  • 传统文件系统:ext2 / minix / MS-DOS / FAT (用 vfat 模块) / iso9660 (光盘)等等;
  • 日志式文件系统: ext3 / ReiserFS / Windows' NTFS / IBM's JFS / SGI's XFS
  • 网络文件系统: NFS / SMBFS

 

鸟哥私房菜2_第1张图片

文件系统的简单操作

 

  • df:列出文件系统的整体磁盘使用量;
  • du:评估文件系统的磁盘使用量(常用在推估目录所占容量)
  • df

鸟哥私房菜2_第2张图片


du




实体链接与符号链接: ln

Hard Link (实体链接, 硬式连结或实际连结)

 

  • 每个文件都会占用一个 inode ,文件内容由 inode 的记录来指向;
  • 想要读取该文件,必须要经过目录记录的文件名来指向到正确的 inode 号码才能读取。

也就是说,其实文件名只与目录有关,但是文件内容则与 inode 有关。那么想一想, 有没有可能有多个档名对应到同一个 inode 号码呢?有的!那就是 hard link 的由来。 所以简单的说:hard link 只是在某个目录下新增一笔档名链接到某 inode 号码的关连记录而已。


[root@www ~]# ln /etc/crontab . <==创建实体链接的命令
[root@www ~]# ll -i /etc/crontab /root/crontab 
1912701 -rw-r--r-- 2 root root 255 Jan 6 2007 /etc/crontab 
1912701 -rw-r--r-- 2 root root 255 Jan 6 2007 /root/crontab

你可以发现两个档名都连结到 1912701 这个 inode 号码,所以您瞧瞧,是否文件的权限/属性完全一样呢? 因为这两个『档名』其实是一模一样的『文件』啦!而且你也会发现第二个字段由原本的 1 变成 2 了! 那个字段称为『连结』,这个字段的意义为:『有多少个档名链接到这个 inode 号码』的意思

hard link 是有限制的:

  • 不能跨 Filesystem;
  • 不能 link 目录。
  • Symbolic Link (符号链接,亦即是快捷方式)

  •  Symbolic link 就是在创建一个独立的文件,而这个文件会让数据的读取指向他 link 的那个文件的档名由于只是利用文件来做为指向的动作, 所以,当来源档被删除之后,symbolic link 的文件会『开不了』, 会一直说『无法开启某文件!』。实际上就是找不到原始『档名』而已啦!
  • 鸟哥私房菜2

  • 关于目录的 link 数量:
  • 新的目录的 link 数为 2 ,而上一级目录的 link 数则会添加 1 

  • 磁盘的分割、格式化、检验与挂载:
  • 如果我们想要在系统里面新增一颗硬盘时,应该有哪些动作需要做的呢:

    1. 对磁盘进行分割,以创建可用的 partition ;
    2. 对该 partition 进行格式化( format ),以创建系统可用的 filesystem;
    3. 若想要仔细一点,则可对刚刚创建好的 filesystem 进行检验;
    4. 在 Linux 系统上,需要创建挂载点 ( 亦即是目录 ),并将他挂载上来;

  • 磁盘分区: fdisk
  • 使用的『装置文件名』请不要加上数字,因为 partition 是针对『整个硬盘装置』而不是某个 partition 呢!所以运行『 fdisk /dev/hdc1 』 就会发生错误啦!
  • 只要离开 fdisk 时按下『q』,那么所有的动作『都不会生效!』相反的, 按下『w』就是动作生效的意思
  • 再次强调,你可以使用 fdisk 在您的硬盘上面胡搞瞎搞的进行实际操作,都不打紧, 但是请『千万记住,不要按下 w 即可!』离开的时候按下 q 就万事无妨啰!

  • 如果该硬盘某个 partition 还在使用当中, 那么很有可能系统核心会无法重载硬盘的 partition table ,解决的方法就是将该使用中的 partition 给他卸除,然后再重新进入 fdisk 一遍,重新写入 partition table ,那么就可以成功啰!

  • fdisk 没有办法处理大于 2TB 以上的磁盘分区槽

  • 磁盘格式化
  • 割完毕后自然就是要进行文件系统的格式化啰!格式化的命令非常的简单,那就是『make filesystem, mkfs』 这个命令啦!这个命令其实是个综合的命令,他会去呼叫正确的文件系统格式化工具软件!
  • mkfs
  • 鸟哥私房菜2
    [root@www ~]# mkfs[tab][tab]mkfsmkfs.cramfs mkfs.ext2 mkfs.ext3 mkfs.msdos mkfs.vfat # 按下两个[tab],会发现 mkfs 支持的文件格式如上所示!可以格式化 vfat喔!


  • mke2fs
  • 鸟哥私房菜2_第3张图片
    当没有指定 -j 的时候, mke2fs 使用 ext2 为格式化文件格式,若加入 -j 时,则格式化为 ext3 这个 Journaling 的 filesystem 呦!

  • 磁盘检验: fsck, badblocks
  • fsck
  • 鸟哥私房菜2_第4张图片
    范例二:系统有多少文件系统支持的 fsck 软件?[root@www~]# fsck[tab][tab]fsckfsck.cramfs fsck.ext2 fsck.ext3 fsck.msdosfsck.vfat
  • 注意:通常只有身为 root 且你的文件系统有问题的时候才使用这个命令,否则在正常状况下使用此一命令, 可能会造成对系统的危害
  • 运行 fsck 时, 被检查的 partition 务必不可挂载到系统上!亦即是需要在卸除的状态喔!
  • xt2/ext3 文件系统的最顶层(就是挂载点那个目录底下)会存在一个『lost+found』的目录吧! 该目录就是在当你使用 fsck 检查文件系统后,若出现问题时,有问题的数据会被放置到这个目录中喔! 所以理论上这个目录不应该会有任何数据,若系统自动产生数据在里面,那...你就得特别注意你的文件系统啰!

磁盘挂载与卸除
  • 不过要进行挂载前,你最好先确定几件事:

    • 单一文件系统不应该被重复挂载在不同的挂载点(目录)中;
    • 单一目录不应该重复挂载多个文件系统;
    • 要作为挂载点的目录,理论上应该都是空目录才是。
  • 如果你要用来挂载的目录里面并不是空的,那么挂载了文件系统之后,原目录下的东西就会暂时的消失鸟哥私房菜2_第5张图片
    挂载Ext2/Ext3文件系统
  • 鸟哥私房菜2_第6张图片

  • /etc/filesystems:系统指定的测试挂载文件系统类型;
  • /proc/filesystems:Linux系统已经加载的文件系统类型。
  • 那我怎么知道我的 Linux 有没有相关文件系统类型的驱动程序呢?我们 Linux 支持的文件系统之驱动程序都写在如下的目录中:

    • /lib/modules/$(uname -r)/kernel/fs/



  • 重新挂载根目录与挂载不特定目录
  • 整个目录树最重要的地方就是根目录了,所以根目录根本就不能够被卸除的!问题是,如果你的挂载参数要改变, 或者是根目录出现『只读』状态时,如何重新挂载呢?最可能的处理方式就是重新启动 (reboot)! 不过你也可以这样做:

    范例六:将 / 重新挂载,并加入参数为 rw 与 auto 
    [root@www ~]# mount -o remount,rw,auto /

    重点是那个『 -o remount,xx 』的选项与参数!请注意,要重新挂载 (remount) 时, 这是个非常重要的机制!尤其是当你进入单人维护模式时,你的根目录常会被系统挂载为只读,这个时候这个命令就太重要了!

    另外,我们也可以利用 mount 来将某个目录挂载到另外一个目录去喔!这并不是挂载文件系统,而是额外挂载某个目录的方法! 虽然底下的方法也可以使用 symbolic link 来连结,不过在某些不支持符号链接的程序运行中,还是得要透过这样的方法才行。

    范例七:将 /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)

    看起来,其实两者连结到同一个 inode 嘛! ^_^ 没错啦!透过这个 mount --bind 的功能, 您可以将某个目录挂载到其他目录去喔!而并不是整块 filesystem 的啦!所以从此进入 /mnt/home 就是进入 /home 的意思喔!

    • umount (将装置文件卸除)
    [root@www ~]# umount [-fn] 装置文件名或挂载点
    选项与参数: -f :强制卸除!可用在类似网络文件系统 (NFS) 无法读取到的情况下;
     -n :不升级 /etc/mtab 情况下卸除。

    就是直接将已挂载的文件系统给他卸除即是!卸除之后,可以使用 df 或 mount -l 看看是否还存在目录树中? 卸除的方式,可以下达装置文件名或挂载点,均可接受啦

     

    • 使用 Label name 进行挂载的方法

    除了磁盘的装置文件名之外,其实我们可以使用文件系统的标头(label)名称来挂载喔! 举例来说,我们刚刚卸除的 /dev/hdc6 标头名称是『vbird_logical』,你也可以使用 dumpe2fs 这个命令来查询一下啦!然后就这样做即可:



    范例九:找出 /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

    这种挂载的方法有一个很大的好处:『系统不必知道该文件系统所在的接口与磁盘文件名!』 更详细的说明我们会在下

    磁盘参数修订

    mknod

    e2label

     

    我们在 mkfs 命令介绍时有谈到配置文件系统标头 (Label) 的方法。 那如果格式化完毕后想要修改标头呢?就用这个 e2label 来修改了。那什么是 Label 呢? 我们拿你曾用过的 Windows 系统来说明。当你打开『文件总管』时,C/D等槽不是都会有个名称吗? 那就是 label (如果没有配置名称,就会显示『本机磁盘驱动器』的字样)

    这个东西除了有趣且可以让你知道磁盘的内容是啥玩意儿之外,也会被使用到一些配置文件案当中! 举例来说,刚刚我们聊到的磁盘的挂载时,不就有用到 Label name 来进行挂载吗? 目前 CentOS 的配置文件,也就是那个 /etc/fstab 文件的配置都默认使用 Label name 呢! 那这样做有什么好处与缺点呢?

    • 优点:不论磁盘文件名怎么变,不论你将硬盘插在哪个 IDE / SATA 接口,由于系统是透过 Label ,所以,磁盘插在哪个接口将不会有影响;

    • 缺点:如果插了两颗硬盘,刚好两颗硬盘的 Label 有重复的,那就惨了~ 因为系统可能会无法判断哪个磁盘分区槽才是正确的!

    鸟哥一直是个比较『硬派』作风,所以我还是比较喜欢直接利用磁盘文件名来挂载啦! 不过,如果没有特殊需求的话,那么利用 Label 来挂载也成! 但是你就不可以随意修改 Label 的名称了

    tune2fs

    hdparm


    配置启动挂载:

    启动挂载 /etc/fstab 及 /etc/mtab

     

    刚刚上面说了许多,那么可不可以在启动的时候就将我要的文件系统都挂好呢?这样我就不需要每次进入 Linux 系统都还要在挂载一次呀!当然可以啰!那就直接到 /etc/fstab 里面去修修就行啰!不过,在开始说明前,这里要先跟大家说一说系统挂载的一些限制:

    • 根目录 / 是必须挂载的﹐而且一定要先于其它 mount point 被挂载进来。
    • 其它 mount point 必须为已创建的目录﹐可任意指定﹐但一定要遵守必须的系统目录架构原则
    • 所有 mount point 在同一时间之内﹐只能挂载一次。
    • 所有 partition 在同一时间之内﹐只能挂载一次。
    • 如若进行卸除﹐您必须先将工作目录移到 mount point(及其子目录) 之外。

  • 特殊装置 loop 挂载 (映象档不刻录就挂载使用)

     

    • 建大文件以制作 loop 装置文件!

    想一想,既然能够挂载 DVD 的映象档,那么我能不能制作出一个大文件,然后将这个文件格式化后挂载呢? 好问题!这是个有趣的动作!而且还能够帮助我们解决很多系统的分割不良的情况呢!举例来说,如果当初在分割时, 你只有分割出一个根目录,假设你已经没有多余的容量可以进行额外的分割的!偏偏根目录的容量还很大! 此时你就能够制作出一个大文件,然后将这个文件挂载!如此一来感觉上你就多了一个分割槽啰! 用途非常的广泛啦!

    底下我们在 /home 下创建一个 512MB 左右的大文件,然后将这个大文件格式化并且实际挂载来玩一玩! 这样你会比较清楚鸟哥在讲啥!

    • 创建大型文件

      首先,我们得先有一个大的文件吧!怎么创建这个大文件呢?在 Linux 底下我们有一支很好用的程序 dd !他可以用来创建空的文件喔!详细的说明请先翻到下一章 压缩命令的运用 来查阅,这里鸟哥仅作一个简单的范例而已。 假设我要创建一个空的文件在 /home/loopdev ,那可以这样做:
      [root@www ~]# dd if=/dev/zero of=/home/loopdev bs=1M count=512
      512+0 records in <==读入 512 笔数据 512+0 records out <==输出 512 笔数据536870912 bytes (537 MB) copied, 12.3484 seconds, 43.5 MB/s # 这个命令的简单意义如下: # if 是 input file ,输入文件。那个 /dev/zero 是会一直输出 0 的装置! # of 是 output file ,将一堆零写入到后面接的文件中。 # bs 是每个 block 大小,就像文件系统那样的 block 意义; # count 则是总共几个 bs 的意思。 [root@www ~]# ll -h /home/loopdev-rw-r--r-- 1 root root 512M Oct 28 02:29 /home/loopdev
      dd 就好像在迭砖块一样,将 512 块,每块 1MB 的砖块堆栈成为一个大文件 (/home/loopdev) ! 最终就会出现一个 512MB 的文件!粉简单吧!

    • 格式化

      很简单就创建起一个 512MB 的文件了吶!接下来当然是格式化啰!
      [root@www ~]# mkfs -t ext3 /home/loopdev mke2fs 1.39 (29-May-2006) /home/loopdev is not a block special device. Proceed anyway? (y,n) y<==由于不是正常的装置,所以这里会提示你! Filesystem label= OS type: Linux Block size=1024 (log=0) Fragment size=1024 (log=0) 131072 inodes, 524288 blocks 26214 blocks (5.00%) reserved for the super user .....以下省略.....

    • 挂载

      那要如何挂载啊?利用 mount 的特殊参数,那个 -o loop 的参数来处理!
      [root@www ~]# mount -o loop /home/loopdev /media/cdrom/ [root@www ~]# dfFilesystem 1K-blocks Used Available Use% Mounted on /home/loopdev 507748 18768 462766 4% /media/cdrom

    透过这个简单的方法,感觉上你就可以在原本的分割槽在不更动原有的环境下制作出你想要的分割槽就是了! 这东西很好用的!尤其是想要玩 Linux 上面的『虚拟机』的话, 也就是以一部 Linux 主机再切割成为数个独立的主机系统时,类似 VMware 这类的软件, 在 Linux 上使用 xen 这个软件,他就可以配合这种 loop device 的文件类型来进行根目录的挂载, 真的非常有用的喔! ^_^

            使用实体分割槽建置swap

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

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

  • swap使用上的限制
  • 过, swap 在被创建时,是有限制的喔!

    • 在核心 2.4.10 版本以后,单一 swap 量已经没有 2GB 的限制了,
    • 但是,最多还是仅能创建到 32 个 swap 的数量!
    • 而且,由于目前 x86_64 (64位) 最大内存寻址到 64GB, 因此, swap 总量最大也是仅能达 64GB 就是了!

  • 文件系统的特殊观察与操作
  • boot sector 与 superblock 的关系

  • 在过去非常多的文章都写到启动管理程序是安装到 superblock 内的,但是我们由官方的 How to 文件知道,图解(图 1.3.1)的结果是将可安装启动信息的 boot sector (启动扇区) 独立出来,并非放置到 superblock 当中的

  • superblock 的大小为 1024 bytes;
  • superblock 前面需要保留 1024 bytes 下来,以让启动管理程序可以安装。

  • 磁盘空间之浪费问题
  • 们在前面的 block 介绍中谈到了一个 block 只能放置一个文件, 因此太多小文件将会浪费非常多的磁盘容量。但你有没有注意到,整个文件系统中包括 superblock, inode table 与其他中介数据等其实都会浪费磁盘容量喔!所以当我们在 /dev/hdc6 创建起 ext3 文件系统时, 一挂载就立刻有很多容量被用掉了!

    另外,不知道你有没有发现到,当你使用 ls -l 去查询某个目录下的数据时,第一行都会出现一个『total』的字样! 那是啥东西?其实那就是该目录下的所有数据所耗用的实际 block 数量 * block 大小的值。 我们可以透过 ll -s 来观察看看上述的意义:

         鸟哥私房菜2_第7张图片

    面的特殊字体部分,那就是每个文件所使用掉 block 的容量!举例来说,那个 crontab 虽然仅有 255bytes , 不过他却占用了两个 block (每个 block 为 4K),将所有的 block 加总就得到 104Kbytes 那个数值了。 如果计算每个文件实际容量的加总结果,其实只有 56.5K 而已~所以啰,这样就耗费掉好多容量了!


利用 GNU 的 parted 进行分割行为
然你可以使用 fdisk 很快速的将你的分割槽切割妥当,不过 fdisk 却无法支持到高于 2TB 以上的分割槽! 此时就得需要 parted 来处理了。

parted 可以直接在一行命令列就完成分割,是一个非常好用的命令!他的语法有点像这样:
鸟哥私房菜2_第8张图片

面是最简单的 parted 命令功能简介,你可以使用『 man parted 』,或者是『 parted /dev/hdc help mkpart 』去查询更详细的数据。比较有趣的地方在于分割表的输出。我们将上述的分割表示意拆成六部分来说明:

  1. Number:这个就是分割槽的号码啦!举例来说,1号代表的是 /dev/hdc1 的意思;
  2. Start:起始的磁柱位置在这颗磁盘的多少 MB 处?有趣吧!他以容量作为单位喔!
  3. End:结束的磁柱位置在这颗磁盘的多少 MB 处?
  4. Size:由上述两者的分析,得到这个分割槽有多少容量;
  5. Type:就是分割槽的类型,有primary, extended, logical等类型;
  6. File system:就如同 fdisk 的 System ID 之意。
  • 接下来我们尝试来创建一个全新的分割槽吧!因为我们仅剩下逻辑分割槽可用,所以等一下底下我们选择的会是 logical 的分割类型喔!

    鸟哥私房菜2_第9张图片

    第九章、文件与文件系统的压缩与打包

    压缩前与压缩后的文件所占用的磁碟空间大小, 就可以被称为是『压缩比』罗

    Linux 系统常见的压缩命令:

    鸟哥私房菜2_第10张图片

    Linux上常见的压缩命令就是 gzip 与 bzip2 ,至於 compress 已经退流行了。 gzip 是由 GNU 计画所开发出来的压缩命令,该命令已经取代了 compress 。 后来 GNU 又开发出 bzip2 这个压缩比更好的压缩命令!不过,这些命令通常仅能针对一个文件来压缩与解压缩,如此一来, 每次压缩与解压缩都要一大堆文件,岂不烦人?此时,那个所谓的『打包软件, tar』就显的很重要啦!

    这个 tar 可以将很多文件『打包』成为一个文件!甚至是目录也可以这么玩。不过,单纯的 tar 功能仅是『打包』而已,亦即是将很多文件集结成为一个文件, 事实上,他并没有提供压缩的功能,后来,GNU 计画中,将整个 tar 与压缩的功能结合在一起,如此一来提供使用者更方便并且更强大的压缩与打包功能!

    gzip, zcat 

    gzip 可以说是应用度最广的压缩命令了!目前 gzip 可以解开 compress, zip 与 gzip 等软件所压缩的文件。 至於 gzip 所创建的压缩档为 *.gz 的档名喔!

    鸟哥私房菜2_第11张图片

    [root@www tmp]# zcat man.config.gz 
    # 由於 man.config 这个原本的文件是是文字档,因此我们可以尝试使用 zcat 去读取!
     # 此时萤幕上会显示 man.config.gz 解压缩之后的文件内容!
    cat 可以读取纯文字档,那个 zcat 则可以读取纯文字档被压缩后的压缩档! 由於 gzip 这个压缩命令主要想要用来取代 compress 的,所以不但 compress 的压缩文件可以使用 gzip 来解开,同时 zcat 这个命令可以同时读取 compress 与 gzip 的压缩档呦!

    bzip2, bzcat 

    使用 compress 扩展名自动创建为 .Z ,使用 gzip 扩展名自动创建为 .gz 。这里的 bzip2 则是自动的将扩展名建置为 .bz2 罗!

    打包命令: tar
    鸟哥私房菜2_第12张图片

    其实最简单的使用 tar 就只要记忆底下的方式即可:

    • 压 缩:tar -jcv -f filename.tar.bz2 要被压缩的文件或目录名称
    • 查 询:tar -jtv -f filename.tar.bz2
    • 解压缩:tar -jxv -f filename.tar.bz2 -C 欲解压缩的目录

  • 查阅 tar 文件的数据内容(可察看档名),与备份档名有否根目录的意义

      要察看档名非常的简单!可以这样做:

[root@www ~]# tar -jtv -f /root/etc.tar.bz2 .
...前面省略.... -rw-r--r-- root/root 1016 2008-05-25 14:06:20 etc/dbus-1/session.conf -rw-r--r-- root/root 153 2007-01-07 19:20:54 etc/esd.conf -rw-r--r-- root/root 255 2007-01-06 21:13:33 etc/crontab

       那为什么要拿掉根目录呢?主要是为了安全!我们使用 tar 备份的数据可能会需要解压缩回来使用,  在 tar 所记录的档名 (就是我们刚刚使用 tar -jtvf 所察看到的档名) 那就是解压缩后的实际档名。  如果拿掉了根目录,假设你将备份数据在 /tmp 解开,那么解压缩的档名就会变成『/tmp/ etc/xxx 』。 但『 如果没有拿掉根目录,解压缩后的档名就会是绝对路径, 亦即解压缩后的数据一定会被放置到 /etc/xxx 去! 』如此一来,你的原本的 /etc/ 底下的数据, 就会被备份数据所覆盖过去了!
      
    仅解开单一文件的方法


打包某目录,但不含该目录下的某些文件之作法

[root@www ~]# tar -jcv -f /root/system.tar.bz2 --exclude=/root/etc* \ > 
--exclude=/root/system.tar.bz2 /etc /root

在新版的 tar 命令中,鸟哥发现原本的『 --exclude file 』似乎无法实际运行了!使用 man tar 明明有看到这个选项的说, 但使用 info tar 才发现,选项功能已经变成了『 --exclude=file 』的模式!这个地方得要特别留意呢!

  • 仅备份比某个时刻还要新的文件

         某些情况下你会想要备份新的文件而已,并不想要备份旧文件!此时 --newer-mtime 这个选项就粉重要啦! 其实有两个选项啦,一个是『 --newer 』另一个就是『 --newer-mtime 』,这两个选项有何不同呢? 我们在  第七章的 touch  介绍中谈到过三种不同的时间参数, 当使用 --newer 时,表示后续的日期包含『 mtime 与 ctime 』,而 --newer-mtime 则仅是 mtime 而已! 这样知道了吧! ^_^ 。那就让我们来尝试处理一下罗!
          
  • 基本名称: tarfile, tarball ?

另外值得一提的是,tar 打包出来的文件有没有进行压缩所得到文件称呼不同喔! 如果仅是打包而已,就是『 tar -cv -f file.tar 』而已,这个文件我们称呼为 tarfile 。 如果还有进行压缩的支持,例如『 tar -jcv -f file.tar.bz2 』时,我们就称呼为 tarball (tar 球?)! 

特殊应用:利用管线命令与数据流

完整备份工具:dump

 

其实 dump 的功能颇强,他除了可以备份整个文件系统之外,还可以制定等级喔!什么意思啊! 假设你的 /home 是独立的一个文件系统,那你第一次进行过 dump 后,再进行第二次 dump 时, 你可以指定不同的备份等级,假如指定等级为 1 时,此时新备份的数据只会记录与第一次备份所有差异的文件而已。 看不懂吗?没关系!我们用一张简图来说明。

鸟哥私房菜2_第13张图片
  • 当待备份的数据为单一文件系统:
    如果是单一文件系统 (filesystem) ,那么该文件系统可以使用完整的 dump 功能,包括利用 0~9 的数个 level 来备份, 同时,备份时可以使用挂载点或者是装置档名 (例如 /dev/sda5 之类的装置档名) 来进行备份!

  • 待备份的数据只是目录,并非单一文件系统:
    例如你仅想要备份 /home/someone/ ,但是该目录并非独立的文件系统时。此时备份就有限制啦!包括:

    • 所有的备份数据都必须要在该目录 (本例为:/home/someone/) 底下;
    • 且仅能使用 level 0 ,亦即仅支持完整备份而已;
    • 不支持 -u 选项,亦即无法创建 /etc/dumpdates 这个各别 level 备份的时间记录档;


restore

备份档就是在急用时可以回复系统的重要数据,所以有备份当然就得要学学如何复原了! dump 的复原使用的是 restore 这个命令!这个命令的选项也非常的多~您可以自行 man restore 瞧瞧! 鸟哥在这里仅作个简单的介绍罗!

鸟哥私房菜2_第14张图片

光盘写入工具

那么文字模式的烧录行为要怎么处理呢?通常的作法是这样的:

  • 先将所需要备份的数据建置成为一个映像档(iso),利用 mkisofs 命令来处理;
  • 将该映像档烧录至光盘或 DVD 当中,利用 cdrecord 命令来处理。
mkisofs:创建映像档


其实 mkisofs 有非常多好用的选项可以选择,不过如果我们只是想要制作数据光盘时,上述的选项也就够用了。 光盘的格式一般称为 iso9660 ,这种格式一般仅支持旧版的 DOS 档名,亦即档名只能以 8.3 (档名8个字节,扩展名3个字节) 的方式存在。如果加上 -r 的选项之后,那么文件资讯能够被记录的比较完整,可包括UID/GID与权限等等! 所以,记得加这个 -r 的选项

cdrecord:光盘烧录工具

鸟哥私房菜2_第15张图片
由於 CD/DVD 都是使用 cdrecord 这个命令,因此不论是 CD 还是 DVD 片,下达命令的方法都差不多!不过, DVD 的写入需要额外的 driveropts=burnfree 或 -dao 等选项的辅助才行。 另外,CD 片有 CD-R(一次写入) 与 CD-RW(重复写入),至於 DVD 则主要有两种格式,分别是 DVD-R 及 DVD+R 两种格式。 如果是可重复读写的则为: DVD-RW, DVD+RW 。除了 DVD+RW 的抹除方法可能不太一样之外,其他写入的方式则是一样的。

其他常见的压缩与备份工具

dd

鸟哥私房菜2_第16张图片
cpio

鸟哥私房菜2_第17张图片

  • 备份:find / | cpio -ocvB > /dev/st0
  • 还原:cpio -idvc < /dev/st0

你可能感兴趣的:(鸟哥私房菜2)