首页 > 代码库 > linux学习之 打包压缩及备份制作iso命令
linux学习之 打包压缩及备份制作iso命令
gzip [options] 文件名
默认是压缩之后形成.gz的压缩文件,源文件就不再存在
gzip [options] -c 文件名 > 压缩文件名.gz <==压缩文件并保留源文件
zcat 压缩文件名.gz <==读取纯文本文档压缩文件
bzip2 [options] 文件名
默认是压缩之后形成.bz2的压缩文件,源文件就不再存在,与gzip类似
bzip2 [options] -c 文件名 > 压缩文件名.gz <==压缩文件并保留源文件
bzcat 压缩文件名.bz2 <==读取纯文本文档压缩文件
打包命令tar
tar [options] [cv] -f [建立的文件名] [被打包的目录或文件] <==打包与与压缩
tar [optinos] [tv] -f [建立的文件名] <==查看文件名
tar [optinos] [xv] -f [建立的文件名] [-C 目录] <==解压缩
打包压缩/查看/解压缩常用
tar -jcvf [建立的文件名.bz2] [被打包的目录或文件]
tar -jtvf [建立的文件名.bz2]
tar -jxvf [建立的文件名.bz2] [-C 目录]
gzip的话,把j选项换作z即可
其它重要选项:
-p :保留备份数据的原本权限与属性,常用于备份重要的配置文件
-P :保留绝对路径,亦即允许备份数据中有根目录存在之意;
--exclude=FILE:在压缩的过程中,不要将 FILE 打包
只解压缩压缩包中的某一文档
#tar -jxv -f 打包檔.tar.bz2 待解开文件名
打包某目录,但不包含该目录下的某些文件的作法
#tar -jcv -f /root/system.tar.bz2 --exclude=/root/etc.tar.bz2 /root
仅备份比某个时刻还要新的文件(查看时会看到很多时间还要早的,但那是目录哦!)
#find /etc -newer /etc/passwd <==此时会显示出比 /etc/passwd这个文件的mtime还要新的文件名
#tar -jcvf /root/etc.newer.then.passwd.tar.bz2 --newer-mtime="2008/09/29" /etc/*
dump和restore 备份/还原
虽然 dump 支持整个文件系统或者是单一个别目录,但是对于目录的支持是比较不足的
当待备份的资料为单一文件系统:
如果是单一文件系统 (filesystem) ,那么该文件系统可以使用完整的dump功能,包括利用
0~9 的数个 level来备份, 同时,备份时可以使用挂载点或者是装置文件名 (例如 /dev/sda5
之类的装置文件名) 进行备份
待备份的数据只是目录,并非单一文件系统:
例如你仅想要备份 /home/someone/ ,但是该目录并非独立的文件系统时。此时备份就有限制
啦!包括:
o 所有的备份数据都必须要在该目录 (本例为:/home/someone/) 底下;
o 且仅能使用 level 0 ,亦即仅支持完整备份而已;
o 不支持 -u 选项,亦即无法建立 /etc/dumpdates 这个各别 level备份的时间记录文件;
#dump [-Suvj] [-level] [-f 备份档] 待备份资料
#dump -W
/etc/dumpdates
选项和参数:
-S :仅列出后面的待备份数据需要多少磁盘空间才能够备份完毕;
-u :将这次 dump 的时间记录到 /etc/dumpdates 文件中;
-v :将 dump 的文件过程显示出来;
-j :加入 bzip2 的支持!将数据进行压缩,默认 bzip2 压缩等级为 2
-level:就是我们谈到的等级,从 -0 ~ -9 共十个等级;
-f :有点类似 tar 啦!后面接产生的文件,亦可接例如 /dev/st0 装置文件名等
-W :列出在 /etc/fstab 里面的具有 dump 设定的 partition 是否有备份过?
更多选项自行用man
restore
#restore -t [-f dumpfile] [-h] <==用来查看dump档
#restore -C [-f dumpfile] [-D 挂载点] <==比较dump档和实际文件
#restore -i [-f dumpfile] <==进入互动模式
#restore -r [-f dumpfile] <==还原整个文件系统
选项和参数:
相关的各种模式,各种模式无法混用,例如不可以写 -tC
-t :此模式用在察看 dump 起来的备份文件中含有什么重要数据,类似 tar -t功能;
-C :此模式可以将 dump 内的数据拿出来跟实际的文件系统做比较,最终会列出『在 dump 文件内有记录的,且目前文件系统不一样』的文件;
-i :进入互动模式,可以仅还原部分文件,用在 dump 目录时的还原
-r :将整个 filesystem 还原的一种模式,用在还原针对文件系统的dump备份;
其他较常用到的选项功能:
-h :察看完整备份数据中的 inode 和文件系统 label 等信息
-f :后面就接你要处理的那个 dump 文件啰!
-D :和-C 进行搭配,可以查出后面接的挂载点和dump内有不同的文件
用 restore 观察 dump 后的备份数据内容
#restore -t -f /root/boot.dump
比较差异并且还原整个文件系统
#restore -C -f /root/boot.dump
由于dump是记录整个文件系统的,因此还原时你也应该要给予一个全新的文件系统才行
新建一个文件系统/dev/sda3,挂载在/mnt下
#cd /mnt
#restore -r -f /root/boot.dump
/root/boot.dump.1那个文件内容也还原的话,那就继续使用『restore -r -f /root/boot.dump.1去还原
仅还原部分文件的restore互动模式
#restore -i -f /root/etc.dump
restore>
#此时你就已经进入 restore的互动模式画面中,要注意的是:
#你目前已经在 etc.dump这个文件内,所有的动作都是在 etc.dump内
restore>help <==查看可用指令
…………
restore>extract
<==开始进行解压缩
You have not read any volumes yet. <==这里会询问你需要的 volume
Unless you know which volume your file(s) are on you should start
with the last volume and work towards the first.
Specify next volume # (none if no more volumes): 1 <==只有一个 volume
set owner/mode for ‘.‘? [yn] n <==不需要修改权限
restore > quit <==离开 restore 的功能
光盘写入工具
那么文本模式的刻录行为通常的作法是这样的:
先将所需要备份的数据建置成为一个映像档(iso),利用 mkisofs 指令来处理;
将该映像文件刻录至光盘或DVD当中,利用 cdrecord指令来处理。
mkisofs:建立映像档
我们从 FTP 站下下来的 Linux 映像档 (不管是 CD 还是 DVD) 都得要继续刻录成为实体的光盘/DVD
后, 才能够进一步的使用,包括安装或更新你的 Linux 啦!同样的道理,你想要利用刻录机将你的数据
刻录到 DVD 时, 也得要先将你的数据报成一个映像档,这样才能够写入 DVD 片中。而将你的数据报
成一个映像档的方式就透过 mkisofs 这个指令即可。
#mkisofs [-o 映像档] [-rv] [-m file] 待备份文件.. [-V vol] -graft-point isodir=systemdir ...
选项和参数:
-o :后面接你想要产生的那个映像档文件名。
-r :透过 Rock Ridge 产生支持 Unix/Linux 的文件数据,可记录较多的信息;
-v :显示建置 ISO 文件的过程
-m file :-m 为排除文件 (exclude) 的意思,后面的文件不备份到映像档中
-V vol :建立 Volume,有点像 Windows 在文件管理器内看到的CD title 的东西
-graft-point:graft 有转嫁或移植的意思,相关资料在底下文章内说明
光盘的格式一般称为 iso9660 ,这种格式一般仅支持旧版的DOS文件名,亦即文件名只能以 8.3
(文件名 8 个字符,扩展名 3 个字符) 的方式存在如果加上-r的选项后,那么文件信息能够被记录
的比较完整,可包括 UID/GID与权限等等, 所以,记得加这个 -r 的选项。
此外,一般预设的情况下,所有要被加到映像档中的文件都会被放置到映象文件中的根目录, 如此一来
可能会造成刻录后的文件分类不易的情况。所以,你可以使用 -graft-point 这个选项,当你使用这个选
后, 可以利用如下的方法来定义位于映像文件中的目录,例如:
映像文件中的目录所在=实际 Linux 文件系统的目录所在
/movies/=/srv/movies/ (在 Linux 的 /srv/movies 内的文件,加至映像文件中的 /movies/ 目录)
/linux/etc=/etc (将 Linux 中的 /etc/ 内的所有数据备份到映像文件中的 /linux/etc/ 目录中)
我们透过一个简单的范例来说明一下吧。如果你想要将 /root, /home, /etc 等目录内的数据通通刻录起来的话,先得要处理一下映像档,我们先不使用 -graft-point 的选项来处理这个映像档试看看:
#mkisofs -r -v -o /tmp/system.img /root /home /etc
#mount -o loop /tmp/system.img /mnt <==挂载,然后查看结果
由上面的范例我们可以看到,三个目录 (/root, /home, /etc) 的数据通通放置到了映像文件的最顶层目
录中,尤其由于/root/etc的存在,导致那个 /etc的数据似乎没有被包含进来, 而且还有 lost+found的目录存在,此时我们可以使用 -graft-point来处理
# mkisofs -r -V ‘linux_file‘ -o /tmp/system.img -m /home/lost+found -graft-point \
> /root=/root /home=/home /etc=/etc
cdrecord:光盘刻录工具
#cdrecord -scanbus dev=ATA <==查询刻录机位置
#cdrecord -v dev=ATA:x,y,z blank=[fast|all] <==抹除重复读写片
#cdrecord -v dev=ATA:x,y,z -format <==格式化DVD+RW
#cdrecord -v dev=ATA:x,y,z [可用选项功能] file.iso
选项与参数:
-scanbus: 用在扫瞄磁盘总线并找出可用的刻录机,后续的装置为 ATA 接口
-v: 在 cdrecord 运作的过程中,显示过程而已。
dev=ATA:x,y,z :后续的x, y, z 为你系统上刻录机所在的位置,非常重要!
blank=[fast|all]:blank 为抹除可重复写入的CD/DVD-RW,使用 fast 较快,all较完整
-format: 仅针对 DVD+RW 这种格式的DVD 而已;
[可用选项功能] 主要是写入 CD/DVD 时可使用的选项,常见的选项包括有:
-data : 指定后面的文件以数据格式写入,不是以 CD 音轨(-audio)方式写入
speed=X : 指定刻录速度,例如 CD可用 speed=40为40 倍数,DVD则可用 speed=4 之类
-eject : 指定刻录完毕后自动退出光盘
fs=Ym : 指定多少缓冲存储器,可用在将映像档先暂存至缓冲存储器。预设为 4m,一般建议可增加到 8m,
不过,还是得视你的刻录机而定。
针对 DVD的选项功能:
driveropts=burnfree :打开 Buffer Underrun Free 模式的写入功能
-sao: 支持 DVD-RW 的格式
更多选项自行man
侦测你的刻录机所在位置:
文本模式的刻录确实是比较麻烦的,因为没有所见即所得的环境,要刻录首先就得要找到刻录机,
而由于早期的刻录机都是使用 SCSI接口,因此查询刻录机的方法就得要配合着 SCSI接口的认定来处理了。
查询刻录机的方式为:
#cdrecord -scanbus
在查询的结果当中可以发现有一台刻录机, 其中也显示出这台刻录机的型号,而最重要的就是上表中有底线的那三个数字,那三个数字就是代表这台刻录机的位置! 以上表的例子中,这部刻录机的位置在『 ATA:1,1,0 』这个地方。那么现在要如何将/tmp/system.img刻录到CD/DVD里面去呢?鸟哥这里先以CD为例,鸟哥用的是CD-RW(可重复读写) 的光盘片,说实在话,虽然 CD-RW或DVD-RW比较贵一点,不过至少可以重复利用, 对环境的冲击比较小,建议大家使用可重复读写的片子。由于CD-RW可能要先进行抹除的工作(将原本里面的数据删除)然后才能写入, 因此,底下我们先来看看
如何抹除一片 CD/DVD的方法,然后直接写入光盘
Tips:由于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 的抹除方法可能不太一样之外,其他写入的方式则是一样的。
1. 先抹除光盘的原始内容:(可重复读写光盘)
#cdrecord -v dev=ATA:1,1,0 blank=fast
2.开始刻录
#cdrecord -v dev=ATA:1,1,0 fs=8m -dummy -data /tmp/system.img
[-data选项是默认的,要不要都可以,自行man]
3. 刻录完毕后,测试挂载一下,检验内容:
#mount -t iso9660 /dev/cdrom /mnt
#df -h /mnt
进行 DVD-RW 的刻录动作:
1.擦除
#cdrecord -v dev=ATA:1,1,0 blank=fast
2. 开始写入 DVD ,请注意,有些选项或 CD 并不相同
#cdrecord -v dev=ATA:1,1,0 fs=8m -data -sao driveropts=burnfree /tmp/system.img
3. 刻录完毕后,测试挂载一下,检验内容:
#mount -t iso9660 /dev/cdrom /mnt
#df -h /mnt
其他常见的压缩和备份工具
dd
这个 dd指令最大的功效,应该是在于『备份』, 因为 dd 可以读取磁盘装置的内容(几乎是直接读取扇区"sector"),然后将整个装置备份成一个文件,dd的一些比较重要的选项,如下:
#dd if="input_file" of="output_file" bs="block_size" count="number"
选项和参数:
if :就是 input file ,也可以是装置
of :就是 output file ,也可以是装置
bs :规划的一个 block的大小,若未指定则预设是512bytes(一个 sector的大小)
count:多少个 bs的意思。
将 /etc/passwd 备份到 /tmp/passwd.back 当中
#dd if=/etc/passwd of=/tmp/passwd.back
将自己的磁盘的第一个扇区备份下来
#dd if=/dev/hdc of=/tmp/mbr.back bs=512 count=1
第一个扇区内含有 MBR和partition table ,透过这个动作, 可以一口气将这个磁盘的MBR和partition table备份哩!
找出系统最小的那个分割槽,并且将他备份下来:
cpio
这个令挺有趣的,因为 cpio 可以备份任何东西,包括装置设备文件。不过 cpio 有个大问题, 那就是 cpio 不会主动的去找文件来备份,所以 cpio 得要配合类似 find 等可以找到文件名的指令来告知 cpio该被备份的数据在哪里
#cpio -ovcB > [file|device] <==备份
#cpio -ivcdu < [file|device] <==还原
#cpio -ivct < [file|device] <==察看
备份会使用到的选项和参数:
-o :将数据 copy 输出到文件或装置上
-B :让预设的Blocks 可以增加至 5120 bytes ,预设是 512 bytes ,这样的好处是可以让大文件的储存速度
加快(请参考 i-nodes 的观念)
还原会使用到的选项和参数:
-i :将数据自文件或装置 copy 出来系统当中
-d :自动建立目录!使用 cpio所备份的数据内容不见得会在同一层目录中,因此我们
必须要让 cpio 在还原时可以建立新目录,此时就得要 -d 选项的帮助
-u :自动的将较新的文件覆盖较旧的文件
-t :需配合 -i 选项,可用在"察看"以 cpio 建立的文件或装置的内容
一些可共享的选顷和参数:
-v :让储存的过程中文件名可以在屏幕上显示
-c :一种较新的portable format方式储存
更多详细解释自行man
找出 /boot 底下的所有文件,然后将他备份到 /tmp/boot.cpio 去
#find /boot | cpio -ocvB > /tmp/boot.cpio
#cpio -idvc < /tmp/boot.cpio
linux学习之 打包压缩及备份制作iso命令