-------------第九章 存取空间的管理----------------
目录:
df 查询文件系统中的可用或已用存取空间及文件信息节点数量
du 查询指定目录中每个文件或目录占用的磁盘空间
find -size 检索指定目录中指定大小的文件
ls -s -h 以KB 或者MB为单位,显示文件大小
cpio 用于创建,转储或者恢复cpio档案文件.实现文件或者文件系统的备份和恢复.也可以用于实现整体目录层次结构的复制
tar 用于创建,转储或恢复tar档案文件
dd 实现原始数据复制,可以用于文件或者整个文件系统
------------------------------------------------------------------------
1. df [-ailhkT] [-t fstype ] [filesys]
-a 所有的文件系统
-h 已kb,mb,gb为单位,显示已安装文件系统的存取使用情况
-i 显示信息节点的情况
-k 以KB为单位显示
-l 显示已安装本地文件系统的存储空间使用情况
-t fstype 指定查看某个文件系统系统类型的使用情况
-T 显示文件系统的格式
列:
[root@yangcan ~]# df -Th
[root@yangcan ~]# df -h -t ext4
[root@yangcan ~]# df -i
[root@yangcan ~]# df -i -t ext4 -T
Filesystem Type Inodes IUsed IFree IUse% Mounted on
/dev/sda2 ext4 1068960 89326 979634 9% /
/dev/sda1 ext4 76912 43 76869 1% /boot
2. du查看已用存储空间
df [-ach] [directory]
-a 以KB为单位,列出指定目录下每个文件,每个子目录占用的磁盘空间数量
-c 显示指定目录或当前目录及其子目录占用的磁盘空间数量 --显示查询目录
-h 已kb,mb,gb为单位显示占用的空间数量
-k
-m
-s 计算目录以及子目录,总共占用的磁盘空间
[root@yangcan ~]# du /etc/yum.repos.d/
20 /etc/yum.repos.d/
[root@yangcan ~]# du -a /etc/yum.repos.d/
4 /etc/yum.repos.d/rhel-source.repo.bak
4 /etc/yum.repos.d/redhat6.4-dvd-yum.repo
4 /etc/yum.repos.d/redhat.repo
4 /etc/yum.repos.d/packagekit-media.repo
20 /etc/yum.repos.d/
[root@yangcan ~]# du -c /etc/yum.repos.d/
20 /etc/yum.repos.d/
20 total
[root@yangcan ~]# du -ch /etc/yum.repos.d/
20K /etc/yum.repos.d/
20K total
[root@yangcan ~]# du -c /etc/|sort -n
## 大的排下面
[root@yangcan ~]# du -c /etc/|sort -n -r
##大的排上面
-n 按数值而非字符排序
-r 表示反向排序
[root@yangcan ~]# du -hs /etc/
33M /etc/
3. 使用find找出超大的文件
选项:
-depth 首先查找当前目录,在查找子目录
-maxdepth level 进去指定目录下层目录搜索时,最深不超过level层
-follow 跟踪符号链接的文件
-name
-iname 不区分大小写
-type
-size + - 以KB为单位
-fstype 查找位于某一文件系统中的文件
-user
-group
-nouser -nogroup
-perm + -
-[a|c|m]newer filename
-[a|c|m]time + -
a 访问过 access
c 状态改变 status change
m 内容被修改 modify
action:
-print
-ls
-exec CMD {}\;
-ok CMD{}\;
xargs CMD
列:
[root@yangcan etc]# find . -size 10M -exec ls -ls {}\;|gwak '{print $1 "\t" $10}'|sort -rn
+10M
-10M 他们之前的区别
[root@yangcan etc]# find ~/zqf -size +10K -name "*.c"
[root@yangcan etc]#find ~/zqf !-user zqf -or -name "*.c"
[root@yangcan etc]#find . -perm -7 |xargs chmod o-w
[root@yangcan ~]# find ~ -size +100 -atime 1 -print >/tmp/rmls.txt
[root@yangcan ~]# cat /tmp/rmls.txt
/root/l2l.txt
/root/ll.txt
[root@yangcan ~]# rm `cat /tmp/rmls.txt`
4. ls -ls 以KB 为单位显示
5. cpio工作原理: 首先利用find生成一个文件列表,然后通道管道提交给cpio命令
-i 恢复
-o 备份
-p 复制
-a 复制完成后复原文件的访问时间 atime
-d 与-i或者-p一起使用,创建必要的目录
-m 保持原有文档的修改时间,但对于目录无效
-c 以ASCII字符格式读写头信息,确保不同的linux系统间的兼容性
-A 把新复制的文件追加到档案的后面,在与-O -F使用时,指定的档案文件必须是磁盘
-B 以5120个字节作为数据块的读写
-f 仅复制与指定模式不匹配的文件
-O FILE 使用指定的档案文件作为输出,提示满了可更换新的介质,只能与-o一起使用
-t 读取并显示档案文件中的文件列表
-u 强制复制
-v 显示方式
列:
备份
[root@yangcan ~]# find . -print|cpio -oca >/tmp/r.cpio --备份文件是相对路径
1483 blocks
[root@yangcan ~]# find /root -print|cpio -oca >/tmp/r.cpio --备份文件为绝对路径,不推荐
[root@yangcan ~]# mkdir /tmp/11
[root@yangcan ~]# cd /tmp/11
还原
[root@yangcan 11]# cpio -icdmu < /tmp/r.cpio
1481 blocks
复制
[root@yangcan 11]#find . -depth -print|cpio -pdmu ../22
备份到磁盘
[root@yangcan 22]# find . -print|cpio -ocvB >/dev/sda5
恢复到磁盘
[root@yangcan 22]#cpio -icdmu /dev/sda6 </dev/sda5
查看
cpio -itv </tmp/r.cpio
cpio -ict </tmp/r.cpio
恢复指定的文件
[root@yangcan 22]# cpio -icmu "*recently-used.xbel" </tmp/r.cpio
1481 blocks
[root@yangcan 22]# ll -a
total 20
drwxr-xr-x. 2 root root 4096 Aug 7 14:59 .
drwxrwxrwt. 62 root root 4096 Aug 7 14:57 ..
-rw-------. 1 root root 8568 Aug 5 20:54 .recently-used.xbel
追加
[root@yangcan ~]# find ~/new.file -print|cpio -oAcv -F /tmp/r.cpio
-------------------------------------------------------------------------------------------------------------
6. tar 常用命令技巧
简介
参数:
-c :建立一个压缩档案的参数指令(create 的意思);
-x :解开一个压缩档案的参数指令!
-t :查看 tarfile 里面的档案!
特别注意,在参数的下达中, c/x/t 仅能存在一个!不可同时存在!
因为不可能同时压缩与解压缩。
-z :是否同时具有 gzip 的属性?亦即是否需要用 gzip 压缩?
-j :是否同时具有 bzip2 的属性?亦即是否需要用 bzip2 压缩?
-v :压缩的过程中显示档案!这个常用,但不建议用在背景执行过程!
-f :使用档名,请留意,在 f 之后要立即接档名喔!不要再加参数!
例如使用『 tar -zcvfP tfile sfile』就是错误的写法,要写成
『 tar -zcvPf tfile sfile』才对喔!
-p :使用原档案的原来属性(属性不会依据使用者而变)
-P :可以使用绝对路径来压缩!
-N :比后面接的日期(yyyy/mm/dd)还要新的才会被打包进新建的档案中!
--exclude FILE:在压缩的过程中,不要将 FILE 打包!
-A, --catenate, --concatenate 将一存档与已有的存档合并
-r, --append --追加备份,指定追加文件路径不一样,备份也不一样
-t, --list 列出存档中文件的目录
-u, --update 仅将较新的文件附加到存档中 ,老文件还存在
-r -t -u -A都不支持压缩档案
-d, --diff, --compare 比较存档与当前文件的不同之处
--delete 从存档中删除
其他参数
--atime-preserve 不改变转储文件的存取时间
-C, --directory DIR 转到指定的目录
-L, --tape-length N 在写入 N*1024 个字节后暂停,等待更换磁盘
-N, --after-date DATE, --newer DATE 仅存储时间较新的文件
-p, --same-permissions, --preserve-permissions 展开所有保护信息
-P, --absolute-paths 不要从文件名中去除 /
--remove-files 建立存档后删除源文件
-S, --sparse 高效处理
--exclude FILE 不把指定文件包含在内
范例:
范例一:将整个 /etc 目录下的档案全部打包成为 /tmp/etc.tar
[root
@linux ~]# tar -cvf /tmp/etc.tar /etc <==仅打包,不压缩!
[root
@linux ~]# tar -zcvf /tmp/etc.tar.gz /etc <==打包后,以 gzip 压缩
[root
@linux ~]# tar -jcvf /tmp/etc.tar.bz2 /etc <==打包后,以 bzip2 压缩
# 特别注意,在参数 f 之后的档案档名是自己取的,我们习惯上都用 .tar 来作为辨识。
# 如果加 z 参数,则以 .tar.gz 或 .tgz 来代表 gzip 压缩过的 tar file ~
# 如果加 j 参数,则以 .tar.bz2 来作为附档名啊~
# 上述指令在执行的时候,会显示一个警告讯息:
# 『tar: Removing leading `/' from member names』那是关于绝对路径的特殊设定。
范例二:查阅上述 /tmp/etc.tar.gz 档案内有哪些档案?
[root
@linux ~]# tar -ztvf /tmp/etc.tar.gz
# 由于我们使用 gzip 压缩,所以要查阅该 tar file 内的档案时,
# 就得要加上 z 这个参数了!这很重要的!
范例三:将 /tmp/etc.tar.gz 档案解压缩在 /usr/local/src 底下
[root
@linux ~]# cd /usr/local/src
[root
@linux src]# tar -zxvf /tmp/etc.tar.gz
# 在预设的情况下,我们可以将压缩档在任何地方解开的!以这个范例来说,
# 我先将工作目录变换到 /usr/local/src 底下,并且解开 /tmp/etc.tar.gz ,
# 则解开的目录会在 /usr/local/src/etc 呢!另外,如果您进入 /usr/local/src/etc
# 则会发现,该目录下的档案属性与 /etc/ 可能会有所不同喔!
范例四:在 /tmp 底下,我只想要将 /tmp/etc.tar.gz 内的 etc/passwd 解开而已
[root
@linux ~]# cd /tmp
[root
@linux tmp]# tar -zxvf /tmp/etc.tar.gz etc/passwd
# 我可以透过 tar -ztvf 来查阅 tarfile 内的文件名称,如果单只要一个档案,
# 就可以透过这个方式来下达!注意到! etc.tar.gz 内的根目录 / 是被拿掉了!
范例五:将 /etc/ 内的所有档案备份下来,并且保存其权限!
[root
@linux ~]# tar -zcvpf /tmp/etc.tar.gz /etc
# 这个 -p 的属性是很重要的,尤其是当您要保留原本档案的属性时!
范例六:在 /home 当中,比 2005/06/01 新的档案才备份
[root
@linux ~]# tar -N '2005/06/01' -zcvf home.tar.gz /home
范例七:我要备份 /home, /etc ,但不要 /home/dmtsai
[root
@linux ~]# tar --exclude /home/dmtsai -zcvf myfile.tar.gz /home/* /etc
范例八:将 /etc/ 打包后直接解开在 /tmp 底下,而不产生档案!
[root
@linux ~]# cd /tmp
[root
@linux tmp]# tar -cvf - /etc | tar -xvf -
# 这个动作有点像是 cp -r /etc /tmp 啦~依旧是有其有用途的!
# 要注意的地方在于输出档变成 - 而输入档也变成 - ,又有一个 | 存在~
# 这分别代表 standard output, standard input 与管线命令啦!
# 这部分我们会在 Bash shell 时,再次提到这个指令跟大家再解释啰!
#备份文件
tar -zcvpf /backups/full-backup.tar.gz /home /etc
#备份不需要的文件exclude
tar -zcvpf /backups/full-backup.tar.gz -C / --exclude=mnt --exclude=media
#有txt需要备份文件列表 ,备份的列表文件是没有路径的列表名,所以指定-T时。需要切到备份的目录
tar -zcvpf /backups/full-backup.tar.gz -T whatsbackup.txt
[root@yangcan test]# cat ls.txt
00
11
22
99
ls.txt
[root@yangcan test]# tar -cvf /tmp/ls.tar -T ./ls.txt
00
11
22
99
ls.txt
[root@yangcan test]# tar -tvf /tmp/ls.tar
-rw-r--r-- root/root 0 2012-08-05 05:51 00
-rw-r--r-- root/root 36 2012-08-05 05:36 11
-rw-r--r-- root/root 46 2012-08-05 05:34 22
-rw-r--r-- root/root 0 2012-08-05 05:51 99
-rw-r--r-- root/root 68 2012-08-05 05:59 ls.txt
#给备份添加时间
tar -zcvpf /backups/full-backup_$(date +%Y%m%d-%H%M).tar.gz /home
#保存备份结果
tar -zcvpf /backups/full-backup_$(date +%F).tar.gz /home > /backups/logs/full-backup_$(date +%F).log
#增量备份
tar -N 2008-01-29 -zcvpf /backups/inc-backup_$(date +%F).tar.gz /home
#备份例子:
tar -cvpf /dev/st0 --label="Full-backup created on $(date +%Y%m%d-%H%M)." \
> -C / --exclude=var/spool/ etc home usr/local var/spool
tar -cvpf /dev/st0 --label="Incremental-backup created on $(date +%F)." \
> -N $(date -d yesterday "+%F") /etc /home
#恢复文件
tar -zxvpf /backups/full-backup_2008-01-29.tar.gz -C / > etc/passwd etc/shadow
-----------------------------------------------------------------------------------
7. dd 原样复制数据
if=file 指定输入文件
of=file 指定输出文件
bs=1M 指定读写数据快的大小
count=n 指定数据块的数量
列:dd if=/dev/zero of=./10M bs=1M count=10
8. 专业工具备份与恢复数据
dump restore 仅适用于EXT2 3 4 文件系统上
/etc/dumpdates 文件
usage: dump [-level#] [-acmMnqSuv] [-A file] [-B records] [-b blocksize]
[-d density] [-D file] [-e inode#,inode#,...] [-E file]
[-f file] [-h level] [-I nr errors] [-j zlevel] [-Q file]
[-s feet] [-T date] [-y] [-z zlevel] filesystem
dump [-W | -w]
-level 备份级别,-0 完整备份(0-9)范围
-A file 生存一个备份文件列表,以便restore能准备恢复文件
-D file 指定完整备份或者增量备份的信息文件,默认为/etc/dumpdates.
-f file 把备份写到指定的文件,也可以备份到远程主机去root@baby.
-M 支持多卷备份的功能.-f选项制定的是文件名将会作为一个前缀,用于一系列备份文件 <filename>001
-S 备份前,统计大小
-u 成功备份后更新/etc/dumpdates文件
列:
[root@yangcan ~]# dump -S /root/
1633280
--返回的为字节数
完整备份
[root@yangcan ~]# dump -0u -f /tmp/boot.dump /boot
增量备份
在前一次完整备份之前
[root@yangcan ~]# dump -1u -f /tmp/boot1.dump /boot
[root@yangcan ~]# dump -2u -f /tmp/boot2.dump /boot
ps:在运行dump命令时,文件系统应处于禁止的状态,否则无法确保当前文件系统与实际备份数据的一致性,也就是处于单用户模式或者卸载了文件系统!
恢复
[root@yangcan boot]# restore -rf /tmp/boot.dump
[root@yangcan boot]# restore --help
restore: invalid option -- '-'
restore 0.4b42 (using libext2fs 1.41.12 of 17-May-2010)
usage: restore -C [-cdeHlMvVy] [-b blocksize] [-D filesystem] [-E mls]
[-f file] [-F script] [-L limit] [-s fileno]
restore -i [-acdehHlmMouvVy] [-A file] [-b blocksize] [-E mls]
[-f file] [-F script] [-Q file] [-s fileno]
restore -P file [-acdhHlmMuvVy] [-b blocksize]
[-f file] [-F script] [-s fileno] [-X filelist] [file ...]
restore -r [-cdeHlMuvVy] [-b blocksize] [-E mls]
[-f file] [-F script] [-s fileno] [-T directory]
restore -R [-cdeHlMuvVy] [-b blocksize] [-E mls]
[-f file] [-F script] [-s fileno] [-T directory]
restore -t [-cdhHlMuvVy] [-A file] [-b blocksize]
[-f file] [-F script] [-Q file] [-s fileno] [-X filelist] [file ...]
restore -x [-acdehHlmMouvVy] [-A file] [-b blocksize] [-E mls]
[-f file] [-F script] [-Q file] [-s fileno] [-X filelist] [file ...]
-C :比较文件,备份介质和磁盘中的文件
-i 交互恢复
[root@yangcan boot]# restore -i -f /tmp/boot.dump -->help
-R 断点恢复,从多卷备份的指定介质开始恢复
-r 完整恢复
-t 显示文件
[root@yangcan boot]# restore -t -f /tmp/boot.dump
-x 部分恢复,如果指定的文件参数匹配备份介质中的某个目录,且未指定-h选项,则递归的抽取目录中的文件
[root@yangcan boot]# restore -f /tmp/boot.dump -x "grub"
恢复了grub文件夹下所有的文件
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] y
[root@yangcan boot]# restore -f /tmp/boot.dump -xh "grub"
只恢复了一个空文件夹
[root@yangcan ~]# dump -0u -f /tmp/boot.dump -A /tmp/boot.list /boot
-A file 从指定的备份文件列表,以便在不能访问介质的情况下,也能确认恢复文件是什么?与C, i, R, r, t or x 配合使用
[root@yangcan grub]# restore -A /tmp/boot.list
restore: none of C, i, R, r, t or x options specified
[root@yangcan grub]# restore -t -A /tmp/boot.list
指定恢复 和 -x指定恢复一样
[root@yangcan grub]# restore -if /tmp/boot.dump
restore > ls
.:
.vmlinuz-2.6.32-220.el6.i686.hmac initramfs-2.6.32-220.el6.i686.img
System.map-2.6.32-220.el6.i686 lost+found/
config-2.6.32-220.el6.i686 symvers-2.6.32-220.el6.i686.gz
efi/ vmlinuz-2.6.32-220.el6.i686
restore > add initramfs-2.6.32-220.el6.i686.img
restore > extract
[root@yangcan grub]# ll
total 14472
-rw-r--r--. 1 root root 14818107 Aug 2 00:34 initramfs-2.6.32-220.el6.i686.img