Linux打包和压缩技术

时间:2021-03-04 09:11:52
  • 对于文件进行压缩,可以大幅度减少占用的磁盘空间,这就是大量的压缩软件盛行的原因;
  • 对于不同的压缩格式通常使用不同的后缀名称来进行区别;
    • *.Z:使用compress压缩之后的文件;
    • .gz:使用gzip压缩之后的程序;
    • .bz2:使用bzip2压缩之后的程序;
    • .tar:使用tar打包的程序,并没有进行压缩;
    • .tar.gz:使用tar进行打包,然后使用gzip进行压缩;
    • .tar.bz2:使用tar进行打包,然后使用bzip进行压缩;
  • 打包:表示的是将多个文件归档成为一个文件,并不会改变实际的大小;
  • 压缩表示的是使用具体的压缩算法,改变文件占据磁盘空间的具体大小;
  • 常见的压缩命令
    • compress:通常需要安装yum install ncompress -y;
      • -r:用于进行第归压缩,对于目录和目录里面的内容都进行压缩;
      • -c:将压缩之后的数据输出到标准屏幕;
      • -v:用于显示压缩文件的过程;
      • -d:可以用于直接解压压缩文件;
[root@server8 ~]# compress -r ./ 
[root@server8 ~]# ls
anaconda-ks.cfg.Z install.log.syslog.Z install.log.Z
对于压缩之前的文件就进行删除;
  • 进行解压缩
[root@server8 ~]# ls
anaconda-ks.cfg install.log install.log.syslog.Z
[root@server8 ~]# uncompress install.log.syslog.Z
[root@server8 ~]# ls
anaconda-ks.cfg install.log install.log.syslog
  • gzip:可以用于解压缩compress zip,gzip等软件格式压缩的文件,压缩后的文件是*.gz;
    • -c:讲压缩后的数据输出到屏幕上,可以通过刘重定向进行保存;
    • -d:可以用于解压缩上述格式对应的文件;
    • -t用于检查压缩文件的一致性,查看文件有无错误;
    • -v:用于检查源文件和压缩文件的的压缩比信息;
    • -#:用于指定压缩等级,-1最快,-9最慢,最好的压缩比是-6;
-bash-4.1# gzip -v passwd 
passwd: 59.2% -- replaced with passwd.gz
-bash-4.1# gzip -t passwd.gz
-bash-4.1# gzip -d passwd.gz
  • 对于小文件指定压缩等级并不是很明显
-bash-4.1# gzip -9 -c passwd -v > passwd.gz
passwd: 59.2%
  • gzip具备compress提供的功能,并且能够提供更发达的压缩比,所以相比于compress建议使用gzip;
  • bzip2 一个比gzip功能更加强大的命令;
    • -c:将压缩过程中产生的数据,输出到屏幕上面;
    • -d:表示用于解压缩的参数;
    • -k:表示保留源文件,不删除源文件;
    • -z用于进行压缩的参数;
    • -v:用于显示压缩比信息;
    • -#:用于显示压缩比的参数,-9最慢,-1最快;
[root@server8 mnt]# bzip2 -z -9 -v passwd 
passwd: 2.170:1, 3.686 bits/byte, 53.92% saved, 1109 in, 511 out.
[root@server8 mnt]# bzip2 -d passwd.bz2
[root@server8 mnt]# ls
passwd
  • 这个命令支持,保留源文件的选项
[root@server8 mnt]# bzip2 -z -9 -v -k passwd 
passwd: 2.170:1, 3.686 bits/byte, 53.92% saved, 1109 in, 511 out.
[root@server8 mnt]# ls
passwd passwd.bz2
  • bzip2通常可以用来解压缩.bz,.bz2,.tbz,.tbz2压缩个是的文件,通常需要使用-d选项;
  • 对于使用bzip2压缩的文件,可以不进行解压缩来查看文件里面的内容
[root@server8 mnt]# bzcat passwd.bz2 
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
  • 打包命令tar
  • 上面的压缩文件的命令,通常是对于单个文件或者是一个目录里面的所有文件进行压缩,压缩之后,仍然是多个文件,如果需要压缩后是一个文件,那么就需要使用归档命令,首先对于上述文件进行归档,然后进行压缩;
  • tar命令的使用:
    • -c:用于创建归档文件,通常和-v选项一起使用,用于显示文件的归档过程;
    • -t:用于查看打包文件包含那些文件名;
    • -x:用于解打包或者解压缩,通常和-C一起使用,用于指定解压缩之后的文件路径;
    • -j:表示对于*.tar.bz2进行解压缩,或者创建*.tar.bz2;
    • -z:表示对于*.tar.gz进行解压缩,或者创建*.tar.gz
    • -v:显示过程的详细信息,,也就是显示正在处理的文件名称;
    • -C:用于指定解压缩之后的特定目录;
    • -p:标志保留之前的权限;
    • -P:表示保留绝对路径;
  • 首先创建归档并且诶压缩的文件
原来目录里面文件的大小
[root@server8 mnt]# du -h ./etc | tail -1
25M ./etc
[root@server8 mnt]# du -smh ./etc
25M ./etc
[root@server8 mnt]# ll -h
drwxr-xr-x. 65 root root 4.0K 315 09:49 etc
-rw-r--r--. 1 root root 7.2M 315 09:52 etc.tar.bz2
  • 使用tar并结合压缩的方式来进行系统备份
  • 首先来备份/etc文件,需要注意到下面的信息
[root@server8 mnt]# tar -zpcv -f /root/etc.tar.gz /etc/
tar: Removing leading `/' from member names
  • 为什么需要移除/这个过程,这个主要是为了系统安全,如果不移除,那么在进行解压缩时,就覆盖原来路径下面的内容,如果去掉,那么可以将上述压缩的文件解压到指定的目录里面,选择合适的进行;
  • 如果需要保留根目录需要指定-p选项;
[root@server8 mnt]# tar -jpPcvf /root/etc.and.tar.bz2 /etc/
/etc/
/etc/statetab
/etc/gai.conf
.....
  • 如果进行解压缩文件,就会覆盖/目录里面的内容;
  • 查看压缩包里面的文件
[root@server8 mnt]# tar -jtf /root/etc.and.tar.bz2 | less
/etc/
/etc/statetab
/etc/gai.conf
/etc/gshadow
/etc/inputrc
/etc/sudo-ldap.conf
/etc/printcap
/etc/samba/
/etc/samba/smb.conf
/etc/samba/lmhosts
/etc/libuser.conf
/etc/rsyslog.conf
/etc/exports
/etc/filesystems
/etc/group-
/etc/aliases
/etc/bashrc
/etc/request-key.conf
/etc/postfix/
/etc/postfix/transport
/etc/postfix/relocated
/etc/postfix/canonical
/etc/postfix/access
.....
  • -C这个命令是很常用,用于指定文件的解压位置;
[root@server8 mnt]# tar -jxvf etc.tar.bz2 -C /tmp/
[root@server8 mnt]# du -smh /tmp/etc/
25M /tmp/etc/
  • 关于解压缩的几个特殊用法
  • 仅仅用于解开单一文件的用法
首先找到需要解压的文件的具体名称
[root@server8 mnt]# tar -jtv -f etc.tar.bz2 | grep 'shadow'
---------- root/root 418 2018-03-15 09:49 ./etc/gshadow
---------- root/root 666 2018-03-15 09:49 ./etc/shadow-
---------- root/root 691 2018-03-15 09:49 ./etc/shadow
-rw------- root/root 404 2018-03-15 09:49 ./etc/gshadow-
[root@server8 mnt]# tar -jxv -f ./etc.tar.bz2 ./etc/shadow
./etc/shadow
[root@server8 mnt]# ll etc
total 4
----------. 1 root root 691 315 09:49 shadow
  • 打包压缩某个目录但是不打包压缩一些文件
[root@server8 mnt]# tar -jcvf mnt.tar.bz2 --exclude=/mnt/etc.tar.bz2 --exclude=passwd.bz2 /mnt/ /mnt/etc
tar: Removing leading `/' from member names
/mnt/
/mnt/etc/
/mnt/etc/shadow
/mnt/passwd
/mnt/tar
/mnt/etc/
/mnt/etc/shadow
[root@server8 mnt]# ls
etc etc.tar.bz2 mnt.tar.bz2 passwd passwd.bz2 tar
  • 仅仅备份某个时刻之后的文件
[root@server8 mnt]# tar -jvc -f /mnt/newer.bz2 --newer-mtime="20180209" /etc/*
tar: /etc/X11/prefdm: file is unchanged; not dumped
/etc/X11/applnk/
/etc/X11/fontpath.d/
/etc/xdg/
/etc/xdg/autostart/
tar: /etc/xdg/autostart/restorecond.desktop: file is unchanged; not dumped
/etc/xinetd.d/
/etc/yum/
/etc/yum/vars/
tar: /etc/yum/version-groups.conf: file is unchanged; not dumped
/etc/yum/pluginconf.d/
tar: /etc/yum/pluginconf.d/subscription-manager.conf: file is unchanged; not dumped
tar: /etc/yum/pluginconf.d/product-id.conf: file is unchanged; not dumped
tar: /etc/yum/pluginconf.d/rhnplugin.conf: file is unchanged; not dumped
/etc/yum/protected.d/
tar: /etc/yum.conf: file is unchanged; not dumped
/etc/yum.repos.d/
/etc/yum.repos.d/rhel6.5_high.repo
....

里面包含众多的文件
[root@server8 mnt]# tar -jtf /mnt/newer.bz2 | grep -v '/$'
etc/adjtime
etc/aliases.db
etc/alternatives/libiptc000.x86_64
etc/alternatives/mta-sendmail
etc/alternatives/man-iptables-save.x86_64
etc/alternatives/mta-aliasesman
etc/alternatives/mta-mailqman
...........
  • 强大的dump命令
  • 不仅仅可以用于文件系统备份,也可以用来进行目录的备份,并且是一个允许定制等级的备份工具;
  • 提供dump命令的软件包是dump-0.4-0.6.b42.el6.x86_64,这个软件包需要提前进行安装;
  • 当备份的数据是单一的文件系统时,可以使用完整的dump功能,并且可以使用0~9指定不同的等级,备份的参数可以选择设备文件名称或者是挂载点;
  • 当备份的和数据仅仅是一个目录而不是文件系统时,需要满足下列条件:
    • 1.所有的备份数据都必须在需要备份的目录里面;
    • 2.并且之能够使用level 0,也就是仅仅支持完整备份;
  • dump命令支持的选项
    • -S:表示仅仅列出备份后面的数据需要多少磁盘,但是不进行备份操作;
    • -u:表示将这次的备份时间记录在/etc/dumpdates文件里面;
    • -v:表示dump命令的执行过程;
    • -j:表示对于执行的文件进行压缩,压缩格式为*.bz2,默认的压缩等级为2;
    • -level:表示进行数据备份的等级;
    • -f:用于指定备份产生的文件名称;
    • -W:用于列出/etc/fstab里面的文件是否对有dump执行的分区进行备份过;
  • 长是本分当前系统最小的文件系统
  • 首先找出最小的文件系统
[root@server8 mnt]# df -h 
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/VolGroup-lv_root 7.5G 1.1G 6.1G 15% /
tmpfs 246M 0 246M 0% /dev/shm
/dev/vda1 485M 33M 427M 8% /boot
  • 鉴于tmpfs是一个临时的文件系统,这里仅仅对于/dev/vda1这个系统来进行完整备份[level 0]
  • 测试进行完整备份需要多大的空间来完成
[root@server8 mnt]# dump -S /dev/vda1 
23643136
大约需要22MB来完成完整备份操作
  • 这个时执行完整备份的过程
[root@server8 mnt]# dump -0s /root/boot.dump /boot/
dump: illegal tape size -- /root/boot.dump
[root@server8 mnt]# dump -0u -f /root/boot.dump /boot/
DUMP: Date of this level 0 dump: Sat Mar 17 14:31:30 2018
DUMP: Dumping /dev/vda1 (/boot) to /root/boot.dump
DUMP: Label: none
DUMP: Writing 10 Kilobyte records
DUMP: mapping (Pass I) [regular files]
DUMP: mapping (Pass II) [directories]
DUMP: estimated 23089 blocks.
DUMP: Volume 1 started with block 1 at: Sat Mar 17 14:31:33 2018
DUMP: dumping (Pass III) [directories]
DUMP: dumping (Pass IV) [regular files]
DUMP: Closing /root/boot.dump
DUMP: Volume 1 completed at: Sat Mar 17 14:31:33 2018
DUMP: Volume 1 23170 blocks (22.63MB)
DUMP: 23170 blocks (22.63MB) on 1 volume(s)
DUMP: finished in less than a second
DUMP: Date of this level 0 dump: Sat Mar 17 14:31:30 2018
DUMP: Date this dump completed: Sat Mar 17 14:31:33 2018
DUMP: Average transfer rate: 0 kB/s
DUMP: DUMP IS DONE
  • 关于各个参数的含义在上面已经解释过的;
  • 查看系统生成的关于备份的日志文件
[root@server8 mnt]# cat /etc/dumpdates 
/dev/vda1 0 Sat Mar 17 14:31:30 2018 +0800
  • 各个字段表示的含义
/dev/vda1:表示进行完整备份的设备,或者文件系统
0:表示执行备份的等级;
Sat Mar 17 14:31:30 2018:表示执行备份的时间
  • 系统可能存在的没有进行使用命令dump进行备份过的文件
[root@server8 mnt]# dump -W
Last dump(s) done (Dump '>' file systems):
> /dev/mapper/VolGroup-lv_root ( /) Last dump: never
/dev/vda1 ( /boot) Last dump: Level 0, Date Sat Mar 17 14:31:30 2018
  • 准备执行差异备份,首先需要修改文件,这里使用强大的dd命令,模拟发生文件修改的大小大约为10MB;
[root@server8 mnt]# dd if=/dev/zero of=/boot/test.img bs=1M count=10
10+0 records in
10+0 records out
10485760 bytes (10 MB) copied, 0.00732985 s, 1.4 GB/s
  • 接下来进行差异备份[level 1]
[root@server8 mnt]# dump -1u -f /root/boot.dump.1 /boot/
DUMP: Date of this level 1 dump: Sat Mar 17 14:40:14 2018
DUMP: Date of last level 0 dump: Sat Mar 17 14:31:30 2018
DUMP: Dumping /dev/vda1 (/boot) to /root/boot.dump.1
DUMP: Label: none
DUMP: Writing 10 Kilobyte records
DUMP: mapping (Pass I) [regular files]
DUMP: mapping (Pass II) [directories]
DUMP: estimated 10307 blocks.
DUMP: Volume 1 started with block 1 at: Sat Mar 17 14:40:14 2018
DUMP: dumping (Pass III) [directories]
DUMP: dumping (Pass IV) [regular files]
DUMP: Closing /root/boot.dump.1
DUMP: Volume 1 completed at: Sat Mar 17 14:40:14 2018
DUMP: Volume 1 10330 blocks (10.09MB)
DUMP: 10330 blocks (10.09MB) on 1 volume(s)
DUMP: finished in less than a second
DUMP: Date of this level 1 dump: Sat Mar 17 14:40:14 2018
DUMP: Date this dump completed: Sat Mar 17 14:40:14 2018
DUMP: Average transfer rate: 0 kB/s
DUMP: DUMP IS DONE
  • 这里的查看的备份等级就已经发生改变
[root@server8 mnt]# dump -W
Last dump(s) done (Dump '>' file systems):
> /dev/mapper/VolGroup-lv_root ( /) Last dump: never
/dev/vda1 ( /boot) Last dump: Level 1, Date Sat Mar 17 14:40:14 2018
  • dump备份单一目录的方法
  • 因为对于目录的备份之能够使用level 0,并且不支持-u选项,那么直接对于这个目录进行备份
[root@server8 mnt]# dump -0j -f /mnt/etc.dump.bz2 /etc/
DUMP: Date of this level 0 dump: Sat Mar 17 14:44:04 2018
DUMP: Dumping /dev/mapper/VolGroup-lv_root (/ (dir etc)) to /mnt/etc.dump.bz2
DUMP: Label: none
DUMP: Writing 10 Kilobyte records
DUMP: Compressing output at compression level 2 (bzlib)
DUMP: mapping (Pass I) [regular files]
DUMP: mapping (Pass II) [directories]
DUMP: estimated 26498 blocks.
DUMP: Volume 1 started with block 1 at: Sat Mar 17 14:44:05 2018
DUMP: dumping (Pass III) [directories]
DUMP: dumping (Pass IV) [regular files]
DUMP: Closing /mnt/etc.dump.bz2
DUMP: Volume 1 completed at: Sat Mar 17 14:44:11 2018
DUMP: Volume 1 took 0:00:06
DUMP: Volume 1 transfer rate: 1604 kB/s
DUMP: Volume 1 28850kB uncompressed, 9625kB compressed, 2.998:1
DUMP: 28850 blocks (28.17MB) on 1 volume(s)
DUMP: finished in 6 seconds, throughput 4808 kBytes/sec
DUMP: Date of this level 0 dump: Sat Mar 17 14:44:04 2018
DUMP: Date this dump completed: Sat Mar 17 14:44:11 2018
DUMP: Average transfer rate: 1604 kB/s
DUMP: Wrote 28850kB uncompressed, 9625kB compressed, 2.998:1
DUMP: DUMP IS DONE
  • 关于简单的备份恢复的命令
  • restore对于使用dump备份的文件,使用restore命令来进行恢复
    • -t:表示仅仅用于查看备份文件里面包含那些重要文件,不执行恢复操作;
    • -C:用于列出使用dump备份的备份文件里面和当前对应的文件系统存在哪些是不一样的;
    • -i:表示进入互动模式,用于选择还原哪些文件;
    • -r:将整个文件系统进行还原,使用dump进行的备份进行还原;
    • -h:用于查看备份数据中的inode信息和label信息;
    • -f:表示需要处理的dump文件;
    • -D:通常和-C一起使用,用于后面的挂载点和dump内部不同的文件;
  • 用于查看dump命令的备份里面包含的内容
[root@server8 mnt]# restore -t -f /root/boot.dump
Dump date: Sat Mar 17 14:31:30 2018
Dumped from: the epoch
Level 0 dump of /boot on server8.com:/dev/vda1
Label: none
2 .
11 ./lost+found
65025 ./grub
65031 ./grub/grub.conf
65026 ./grub/splash.xpm.gz
65032 ./grub/menu.lst
65033 ./grub/device.map
65034 ./grub/stage1
65035 ./grub/stage2
65036 ./grub/e2fs_stage1_5
65037 ./grub/fat_stage1_5
65038 ./grub/ffs_stage1_5
65039 ./grub/iso9660_stage1_5
........
  • 上面两列信息分别表示的是inode信息以及文件名称信息;
  • 查看当前文件系统和使用dump备份的文件系统之间的差异
  • 首先尝试修改文件系统里面的内容
[root@server8 boot]# mv config-2.6.32-431.el6.x86_64 config-2.6.32-431.el6.x86_64.back
  • 然后使用命令查看两者之间的差异
[root@server8 boot]# restore -C -f /root/boot.dump
Dump date: Sat Mar 17 14:31:30 2018
Dumped from: the epoch
Level 0 dump of /boot on server8.com:/dev/vda1
Label: none
filesys = /boot
restore: unable to stat ./config-2.6.32-431.el6.x86_64: No such file or directory
Some files were modified! 1 compare errors
  • 上面表示在查找./config-2.6.32-431.el6.x86_64: No such file or directory时,不存在,表示这个文件被修改了,这个不是很明显,在这个文件里面添加一些信息
[root@server8 boot]# vim config-2.6.32-431.el6.x86_64 
# restore resting
#
  • 再次使用上面的命令比较文件之间的差异
[root@server8 boot]# restore -C -f /root/boot.dump
Dump date: Sat Mar 17 14:31:30 2018
Dumped from: the epoch
Level 0 dump of /boot on server8.com:/dev/vda1
Label: none
filesys = /boot
./config-2.6.32-431.el6.x86_64: tape and disk copies are different
Some files were modified! 1 compare errors
  • 这次明确的提示./config-2.6.32-431.el6.x86_64被修改了;
  • 执行还原的过程,首先需要新建立一个文件系统然后进行还原
  • 首先进行分区的建立以及格式化
[root@server8 boot]# fdisk /dev/vdb 
Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel
Building a new DOS disklabel with disk identifier 0xb357903f.
Changes will remain in memory only, until you decide to write them.
After that, of course, the previous content won't be recoverable.

Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite)

WARNING: DOS-compatible mode is deprecated. It's strongly recommended to
switch off the mode (command 'c') and change display units to
sectors (command 'u').

Command (m for help): n
Command action
e extended
p primary partition (1-4)
p
Partition number (1-4): 1
First cylinder (1-16644, default 1):
Using default value 1
Last cylinder, +cylinders or +size{K,M,G} (1-16644, default 16644): +1G

Command (m for help): p

Disk /dev/vdb: 8589 MB, 8589934592 bytes
16 heads, 63 sectors/track, 16644 cylinders
Units = cylinders of 1008 * 512 = 516096 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0xb357903f

Device Boot Start End Blocks Id System
/dev/vdb1 1 2082 1049296+ 83 Linux

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.
[root@server8 boot]# partx /dev/vdb
# 1: 63- 2098655 ( 2098593 sectors, 1074 MB)
# 2: 0- -1 ( 0 sectors, 0 MB)
# 3: 0- -1 ( 0 sectors, 0 MB)
# 4: 0- -1 ( 0 sectors, 0 MB)
[root@server8 boot]# mkfs.ext3 /dev/vdb1
mke2fs 1.41.12 (17-May-2010)
warning: 180 blocks unused.

Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
65664 inodes, 262144 blocks
13116 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=268435456
8 block groups
32768 blocks per group, 32768 fragments per group
8208 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840, 229376

Writing inode tables: done
Creating journal (8192 blocks): done
Writing superblocks and filesystem accounting information: done

This filesystem will be automatically checked every 24 mounts or
180 days, whichever comes first. Use tune2fs -c or -i to override.
  • 然后使用命令进行还原操作
[root@server8 mnt]# restore -r -f /root/boot.dump
restore: ./lost+found: File exists
[root@server8 mnt]# ls
config-2.6.32-431.el6.x86_64 restoresymtable
efi symvers-2.6.32-431.el6.x86_64.gz
grub System.map-2.6.32-431.el6.x86_64
initramfs-2.6.32-431.el6.x86_64.img vmlinuz-2.6.32-431.el6.x86_64
  • 这个过程是一次性将所有文件进行还原的,也可以执行互动模式选择文件进行还原
[root@server8 mnt]# restore -i -f /root/boot.dump
restore > ls
.:
.vmlinuz-2.6.32-431.el6.x86_64.hmac initramfs-2.6.32-431.el6.x86_64.img
System.map-2.6.32-431.el6.x86_64 lost+found/
config-2.6.32-431.el6.x86_64 symvers-2.6.32-431.el6.x86_64.gz
efi/ vmlinuz-2.6.32-431.el6.x86_64
restore > add .vmlinuz-2.6.32-431.el6.x86_64.hmac initramfs-2.6.32-431.el6.x86_64.img

restore > add vmlinuz-2.6.32-431.el6.x86_64
restore > ls
.:
*.vmlinuz-2.6.32-431.el6.x86_64.hmac *initramfs-2.6.32-431.el6.x86_64.img
System.map-2.6.32-431.el6.x86_64 lost+found/
config-2.6.32-431.el6.x86_64 symvers-2.6.32-431.el6.x86_64.gz
efi/ *vmlinuz-2.6.32-431.el6.x86_64
restore > extract
You have not read any volumes yet.
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
set owner/mode for '.'? [yn] n
[root@server8 mnt]# ls -al
total 19744
dr-xr-xr-x. 2 root root 4096 317 15:18 .
dr-xr-xr-x. 22 root root 4096 317 14:04 ..
-rw-------. 1 root root 16037390 225 09:43 initramfs-2.6.32-431.el6.x86_64.img
-rwxr-xr-x. 1 root root 4128944 1111 2013 vmlinuz-2.6.32-431.el6.x86_64
-rw-r--r--. 1 root root 166 1111 2013 .vmlinuz-2.6.32-431.el6.x86_64.hmac
  • add表示添加需要解压缩的文件,delete表示删除解压缩列表中的文件,不删除备份的文件,extract表示按照上面的要求进行解压缩操作
  • 关于神奇的dd命令
  • dd命令可以直接对于某个扇区的文件进行操作
    • if:表示input file,也就是输入的文件,可以是设备;
    • of:表示output file,表示输出文件,也可以是设备;
    • bs:表示blosk size,默认为一个扇区的大小512bytes;
    • count:表示备份bs的数量;
  • 可以执行的几种备份
  • 文件备份
[root@server8 mnt]# dd if=/etc/passwd of=/mnt/passwd.back
2+1 records in
2+1 records out
1109 bytes (1.1 kB) copied, 0.000139913 s, 7.9 MB/s
  • 第一个扇区备份,因为包含MBR 446字节,分区表 64字节的备份,
[root@server8 mnt]# dd if=/dev/vda of=/mnt/first_sector.back bs=512 count=1
1+0 records in
1+0 records out
512 bytes (512 B) copied, 0.000251076 s, 2.0 MB/
  • 如果仅仅备份MBR执行
[root@server8 mnt]# dd if=/dev/vda of=/mnt/first_sector.back bs=446 count=1
1+0 records in
1+0 records out
446 bytes (446 B) copied, 0.000221639 s, 2.0 MB/s
  • 接下来备份一个分区的数据到另一分区上面
[root@server8 /]# fdisk -l /dev/vda1 
Disk /dev/vda1: 524 MB, 524288000 bytes
16 heads, 63 sectors/track, 1015 cylinders
Units = cylinders of 1008 * 512 = 516096 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000


[root@server8 /]# fdisk /dev/vdb

WARNING: DOS-compatible mode is deprecated. It's strongly recommended to
switch off the mode (command 'c') and change display units to
sectors (command 'u').

Command (m for help): n
Command action
e extended
p primary partition (1-4)
p
Partition number (1-4): 2
First cylinder (2083-16644, default 2083):
Using default value 2083
Last cylinder, +cylinders or +size{K,M,G} (2083-16644, default 16644): +4G

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.
[root@server8 /]# partx /dev/vdb
# 1: 63- 2098655 ( 2098593 sectors, 1074 MB)
# 2: 2098656- 10488239 ( 8389584 sectors, 4295 MB)
# 3: 0- -1 ( 0 sectors, 0 MB)
# 4: 0- -1 ( 0 sectors, 0 MB)

[root@server8 /]# fdisk -l /dev/vdb2

Disk /dev/vdb2: 4295 MB, 4295467008 bytes
16 heads, 63 sectors/track, 8323 cylinders
Units = cylinders of 1008 * 512 = 516096 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000