文件系统
对于文件系统的类型介绍
文件系统
文件系统简介
-
文件系统是操作系统用于明确存储设备或分区上的文件的方法和数据结构,即在存储设备上组织文件的方法。操作系统中负责管理和存储文件信息的软件结构称为文件系统,简称文件系统。总结:文件系统属于操作系统(或者说内核)本身带有的功能。
-
从系统角度来看,文件系统是对文件存储设备的空间进行组织和分配,负责文件存储并对存入的文件进行保护和检索的系统。具体来说文件系统的功能是负责为用户建立文件,存入、读出、修改、转储文件,控制文件的存取,安全控制,日志,压缩,加密等等。
-
Linux上支持的文件系统类型:/lib/modules/`uname -r`/kernel/fs
-
对于一块新硬盘的要想使用应该:分区–>构建文件系统–>挂载
-
各种文件系统:https://en.wikipedia.org/wiki/Comparison_of_file_systems
-
如果硬盘上只分区,不使用文件系统, 那么数据在磁盘上的管理形式是以二进制的形式。文件系统就是将分区上的数据按照目录或者文件的形式进行一个逻辑的组织,抽象为文件的概念,访问某个文件时,利用文件系统就可以访问某个文件的具体位置–这是文件系统的基本功能。
-
文件系统不同,特定的功能也不相同,以下特性并非每个文件系统都支持:权限控制,日志管理,加密压缩等。
-
Linux系统上ext3文件系统开始,文件系统带日志功能,日志功能意味着:
(1)将磁盘分成存放数据和存放日志两部分
(2)在磁盘上修改数据时,文件系统先将对磁盘数据的更改或写入先到日志区域记录对磁盘的修改,等将整个数据处理完成结束之后,再将日志记录的更改写入磁盘。此时硬盘文件才真正被修改。
(3)日志功能的优势在于,若出现突然性的掉电,数据写操作正在执行中,可能导致文件被破坏,日志功能将避免这一问题,数据还是完整的,若日志写完啦~,还可直接再写入硬盘,日志功能可避免一些异常故障。
(4)以后的许多软件的日志,大多数情况下,日志都是先于数据更新的。即先写日志,再更新数据。
文件系统类型
- Linux文件系统:
(1)ext2(Extended files system):使用于分区容量不大,更新也不频繁的情况,eg:/boot–目前已不怎么使用,不支持日志功能
(2)ext3:是 ext2 的改进版本,其支持日志功能,能够帮助系统从非正常关机导致的异常
中恢复。它通常被用作通用的文件系统
(3)ext4:是ext文件系统的最新版,提供了很多新的特性,包括纳秒级时间戳,创建和使用巨型文件(16TB)、最大1EB的文件系统,以及速度的提升。 —(修复速度比ext3快)
(4)xfs:SGI,支持最大8EB的文件系统。
(5)其他文件系统:btrfs(Oracle),reiserfs,ifs(AIX),swap
- 光盘:iso9660
- Windows:FAT32,NTFS,exFAT
- Unix:FFS(fast), UFS(unix), JFS2
- 网络文件系统:NFS, CIFS
- 集群文件系统:GFS2, OCFS2(oracle)
- 分布式文件系统:fastdfs,ceph, moosefs, mogilefs, glusterfs, Lustre
- RAW:未经处理或者未经格式化产生的文件系统(裸设备,上面不含有文件系统,访问是以0101的方式进行访问,在特殊的场景下可能系统这么使用,以提升性能,但是失去了可管理性。)
文件系统分类
-
根据其是否支持"journal"功能:
日志型文件系统: ext3, ext4, xfs, …
非日志型文件系统: ext2, vfat -
文件系统的组成部分:
内核中的模块:ext4, xfs, vfat
用户空间的管理工具:mkfs.ext4, mkfs.xfs,mkfs.vfat -
Linux的虚拟文件系统:VFS
-
查前支持的文件系统:cat /proc/filesystems
VFS <虚拟文件系统>
- 什么是VFS?(百度释义)
VFS(virtual File System)的作用就是采用标准的Unix系统调用读写位于不同物理介质上的不同文件系统,即为各类文件系统提供了一个统一的操作界面和应用编程接口。VFS是一个可以让open()、read()、write()等系统调用不用关心底层的存储介质和文件系统类型就可以工作的粘合层。
VFS简单来说就是文件系统与系统调用(应用程序要与硬件通信需要通过系统调用完成)的中间层,因为文件系统的类型有许多,VFS可以屏蔽不同文件系统的差异性,然后对外提供一个统一的接口。
创建文件系统
mkfs命令
-
mkfs - 创建一个Linux文件系统
-
Usage - mkfs [options] [-t type] [fs-options] device [size]
1)-t file system type:
ext4
xfs
vfat
btrfs
注: mkfs -t type = mkfs.type
2)mkfs -t FS_TYPE -L ‘LABEL’ /dev/DEVICE
创建文件系统并设定卷标
创建ext文件系统
- mke2fs:ext系列文件系统专用工具
-t {ext2|ext3|ext4} 指定文件系统类型
-b {1024|2048|4096} 指定块大小
-L ‘LABEL’ 设置卷标
-i # 为数据空间中多少字节创建一个inode,不应该小于block大小
-N # 指定分区中创建多少个inode
-I 一个inode记录占用的磁盘空间大小,128—4096
-m # 默认5%为管理人员预留空间占总空间的百分比
-O FEATURE[…] 启用特定特性
-O ^FEATURE 关闭特定特性
-j 相当于 -t ext3
mkfs.ext3 = mkfs -t ext3 = mke2fs -j = mke2fs -t ext3
注意: centos6也支持xfs文件系统,内核模块(lsmod可查看内核模块)动态装卸载的,但是centos6默认缺少xfs文件系统相关的管理工具,需要自行安装。
文件系统属性信息
-
文件系统标签:指向设备的另一种方式, 前面说过在配置文件中不建议写设备名,因此配置文件可以写文件系统标签和UUID等。
-
文件系统属性查看相关命令:
(1)blkid:块设备属性查看
-U UUID 根据指定的UUID来查找对应的设备
-L LABEL 根据指定LABEL来查找对应的设备
(2)e2label:管理ext系列文件系统的LABEL
e2label DEVICE [LABEL]
(3)findfs:查找分区
findfs [options] LABEL=<label>
findfs [options] UUID=<uuid>
(4)dumpe2fs:显示ext系列文件系统信息,将磁盘块分组管理
-h:显示超级快信息,不显示分组信息
(5)tune2fs:查看或者修改ext系列文件系统可调整的属性值
-l:查看指定文件系统超级快信息;super block
-L ‘LABEL’ :修改卷标
-m # 修改预留给管理员的空间百分比(默认5%,若磁盘容量较大,5%的值预留的比较多)
-j 将ext2升级为ext3
-O:文件系统属性启用或者禁用,-O ^has_journal(关闭日志功能)
-o:调整文件系统的默认挂载选项: -o ^acl
-U UUID:修改UUID号
(6)xfs_info:显示已经挂载的xfs文件系统信息
xfs_info mountpoint -
文件系统元数据分析
注意:磁盘存取的最小单位是block,即使是一个字节的数据,磁盘分配的也是1个block空间。因此需求若全是小于4K的小文件,可以考虑适当减小block。有些场景时block并非是指这里的block,最小存取单位,比如df。
注意: centos6自己手动创建的分区,设置文件系统时默认不具有设置ACL权限的特性。若需要设置ACL权限时需要自己手动添加。
centos 7 手动分区设置新的文件系统默认带有ACL权限特性。
修改文件系统元数据,永久添加:
tune2fs -o acl /dev/sda6
挂载时指定,不修改文件系统元数据,临时性添加:
mount -o acl /dev/sda6 /mnt/sda6
文件系统块的数量庞大,因此文件系统按照一定的逻辑将块进行分组,进行层次化管理—块组。
- ☟☟☟☟ 超级块和inode table
eg:MBR分区:MBR中有64个字节保存的四个主分区信息,此处以partition2为例:
1)partition -->最前面是boot sector (第一个扇区) + 文件系统
2)其中每个File System:被分成了多个超级块 block Group 0|1|2…
3)block Group中包含:Super Block;GPT;Block Bitmap;inode Bitmap,inode Table;data Blocks
①Super Block(超级块)存放文件系统的元数据;超级块在块组有备份;创建文件分区时会有提示。 eg 分多少块,块组怎么分…
②GPT(组描述符),描述组的表信息
③Block Bitmap(块位图):标识块是否被使用(0表示块未使用|1表示块使用)
④inode Bitmap(节点表位图):标识此节点是否被使用
⑤inode Table(节点表):实质为结构体:保存文件的元数据(前面博客对inode有介绍)
⑥data Blocks:数据块指针,指向数据存放的位置
文件系统的检查与修复
-
文件系统故障常生于死机或者非正常关机之后,挂载文件系统标记为“no clean”
-
注意: 一定不要在挂载状态下执行下面命令修复
-
fsck:FILE System Check
fsck.FS_TYPE
FSCK -t FS_TYPE
-a 自动修复
-r 交互式修复错误
注意:FS_TYPE 一定要与分区上文件系统类型相同
- e2fsck:ext系列文件专用的检测修复工具
-y:自动回答yes
-f:强制修复
-p:自动进行安全的修复文件系统问题
- xfs_repair:xfs文件系统专用检测修复工具
-f:修复文件,
-n:只检查
-d:允许修复只读的挂载设备,在单用户下修复 / 时使用,然后立即reboot
- 注意:文件系统修复,并不一定能保证文件不丢失。
文件系统的挂载
-
挂载将额外文件系统与根文件系统某现的目录建立起关联关系,进而使得此目录作为其他文件系统的访问入口。设备关联的目录称为挂载点:mount point。
-
挂载点下原有的文件在挂载完成后会被临时隐藏,因此一般选择空目录作为挂载点。
-
卸载即为解除这种关联关系;卸载时:可使用设备,也可以使用挂载点。
挂载命令mount
-
mount - 挂载文件系统
-
mount:通过查看 /etc/mtab文件显示当前已经挂载的所有设备
-
查看内核追踪到的已挂载的所有设备: cat /proc/mounts ;centos7 /etc/mtab为软链接指向/proc/mounts
-
Usage - mount [-fnrsvw] [-t vfstype] [-o options] device dir
device:指明要挂载的设备
(1)设备文件名:/dev/sd*
(2)卷标:-L ‘LABEL’
(3)UUID:
(4)伪文件系统名称:proc,sysfs,devtmpfs,configfs
dir:挂载点,事先存在,且一般为空
进程正在使用中的设备无法卸载umount
lsof mountpoint查看谁在问挂载的设备
fuser -v mountpoint 查看谁正在访问挂载的设备
fuser -km dir 剔除别人使用此目录
mount 的常用选项:
-t vsftype 指定要挂载的设备上的文件系统类型
-r readonly,只读挂载
-w read and write 读写挂载
-a 自动挂载所有支持自动挂载的设备(定义在/etc/fstab文件中,且挂载选项中有auto功能)
-L ‘LABEL’ 以卷标指定挂载设备
-U ‘UUID’ 以UUID指定要挂载的设备
-B,–bind 绑定目录至另一个目录上
-n 不更新/etc/mtab,mount不可见
-n在centos7此选项不起作用,因为lrwxrwxrwx. 1 root root 17 Jul 17 16:52 /etc/mtab -> /proc/self/mounts
-o options:(挂载文件系统的选项),多个选项直接以逗号分隔
async 异步模式 sync同步模式,内存更改时,同时写磁盘
atime/noatime 包含目录和文件
diratime/nodiratime 目录的访问时间戳
auto/noauto 是否支持自动挂载,是否支持-a选项
exec/noexec 是否支持将文件系统上运行应用程序
dev/nodev 是否支持在此文件系统上使用设备文件
suid/nosuid 是否支持suid和sgid权限
remount 重新挂载
ro 只读 rw读写
user/nouser 是否允许普通用户挂载此设备,/etc/fstab使用
acl 启用此文件系统上的ACL功能
loop 使用loop设备
_netdev 当网络可用时才对网络资源进行挂载,如:NFS文件系统,网络不通就不进行挂载
注意:defaults:相当于:rw,suid,dev,exec,auto,nouser,async
mount 挂载示例
(1)不取消挂载时对挂载的文件系统进行(ro<-->rw)切换:
有些文件系统无法卸载,例如根文件系统:此时只能使用如此方式修改
~]# mount -o ro,remount /dev/sdb6 /mnt/sdb6/
注意ro,remount之间不要有空格
~]# touch /mnt/sdb6/f1
touch: cannot touch ‘f1’: Read-only file system
(2)挂载文件系统时,避免出现循环挂载的情况,(在挂载点的目录下再次挂载与父目录相同的设备)出现循环挂载的情况
(3)挂载目录至某目录:加-B选项,此时挂载点目录下文件被暂时隐藏
data]# mount -B /data/logs/ /data/test/
cat /proc/mounts文件记录是目录所在设备挂载至目录---
/dev/sda5 /data/test xfs rw,relatime,attr2,inode64,noquota 0 0
(4)目录同一时间只能作为一个文件系统的访问入口,当此目录已经挂载至一个文件系统时,
再挂载一个文件系统,此时后面挂载这个文件系统将挤掉原本挂载的文件系统。卸载时,目录
再挂回原来的文件系统。
(5)挂载文件 -- 文件可以设置文件系统,然后被挂载使用
~]# dd if=/dev/zero of=/data/bigfile bs=1G count=1
~]# mkdir /mnt/file;mount /data/bigfile /mnt/file
~]# df /mnt/file/
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/loop0 999320 2564 927944 1% /mnt/file
可见刚创建的文件系统会占据一定的磁盘空间
~]# blkid /data/bigfile
/data/bigfile: UUID="7f465056-6d87-4bba-912f-6724c274f5f0" TYPE="ext4"
注:此时可以将此文件当成分区使用,当然消耗的还是文件所在磁盘的空间,而且还是可移动的,大小随文件大小变化。
注1:使用文件挂载磁盘时,在写入/etc/fstab文件时使用UUID系统不会自动挂载,因为系统不会
寻找整个系统上的文件UUID然后挂载,只能写明文件名/data/bigfile
注2:centos6上与centos7不同,centos6默认不会自动分配loop设备给文件,因此centos6挂载文件需要
指明loop:centos7默认分配loop设备,按需创建
data]#dd if=/dev/zero of=/data/bigfile bs=2M count=1024
data]#mkfs.ext4 bigfile
data]#mkdir /mnt/file;mount -o loop /data/bigfile /mnt/file
data]#df -h /mnt/file/
Filesystem Size Used Avail Use% Mounted on
/data/bigfile 2.0G 3.0M 1.9G 1% /mnt/file
data]#ls /dev/loop* -n1(centos6系统默认loop设备有8个)
brw-rw----. 1 0 6 7, 0 Aug 10 08:43 /dev/loop0
....(部分省略)
(1)手动创建/dev/loop设备
data]#mknod /dev/loop8 b 7 8
(2)修改内核参数文件,添加loop设备数量
vim /boo/grub/grub.conf
在kernel 所在行添加 max loop=#
卸载命令umount
- findmnt - 查看挂载情况
indmnt MOUNT_POINT | device
挂载点挂载设备,显示挂载信息, [ $? -eq 0 ]
挂载点未挂载设备,[ $? -ne 0 ] 可以用于写在脚本中,判断目录是否被挂载
- 查看正在访问指定文件系统的进程
lsof MOUNT_POINT
fuser -v MOUNT_POINT
- 终止所有正在访问指定文件系统的进程
fuser -km MOUNT_POINT
- 卸载
umount DEVICE
umount MOUNT_POINT
挂载点和/etc/fstab
-
配置文件系统体系
-
被mount、fsck和其他程序使用
-
系统重启时保留文件系统体系
-
可以在设备栏使用文件系统卷标
-
使用mount -a 命令挂载/etc/fstal中的所有文件系统(defaults:带有auto功能|默认不写也带有)
-
文件挂载的配置文件/etc/fstab – 每一行定义一个要挂载的文件系统
1、要挂载的设备或伪文件系统
设备文件
LABEL:LABEL=
UUID:UUID=
伪文件系统名称:proc, sysfs
设备名-或者挂载文件时文件名
2、挂载点
3、文件系统类型:ext4,xfs,iso9660,nfs,none,loop
4、挂载选项:defaults,acl,bind…
5、转储频率:0:不备份 1:每天转储 2:每隔一天转储
现在一般不使用啦~不用此做备份
6、fsck检查的文件系统的顺序:允许的数字是0 1 2
0:不自检
1:首先自检;一般只有rootfs才用
2:非rootfs使用
编辑/etc/fstab/文件:
挂载设备:
1(设备) 2(挂载点) 3(文件系统类型) 4(选项) 5(转储频率) 6(是否自检)
swap UUID=... swap swap defaults 0 0
目录 dir dir none bind 0 0
文件 filename dir ext4.. defaults,loop 0 0
光盘 /dev/sr* dir iso9660 defaults 0 0
设备 UUID dir xfs|ext... defaults 0 0
挂载时自检导致开机启动出现问题(配置文件出现问题或者自动挂载的设备出现问题):
centos6:
1、centos6时:/etc/fstab 配置文件中添加自动挂载设备/dev/sda6
①UUID=.(/dev/sda6-UUID).. /mnt/sda6 ext4 defaults 0 2
②破坏/dev/sda6的文件系统:
~]dd if=/dev/zero of=/dev/sda6 bs=1M count=20
③重启:reboot
③此时重启会导致机器因自检自动挂载的文件系统出现故障,而导致机器起不来,
解决操作应该先将/etc/fstab出错的行注释,先保证系统起来。操作在后面截图。
④或者将/etc/fstab文件出错的一行是否自检改成不自检,当然这是挂载的分区出现问题的
情况,若是配置文件出错,比如UUID出现错误,还是直接注释出错的行吧。
centos7:
1)centos7一些虚拟文件系统的挂载已经不再写啦~
2)centos7的自检顺序已经不起作用了,不是根文件系统也可以写1,并不会因为自检
的0,1,2而导致系统起不来
centos6因为自动挂载出现故障导致系统启动出现故障
centos7因为自动挂载出现故障导致系统启动出现故障
交换分区
swap分区
-
swap交换分区是系统RAM的补充,Swap分区支持虚拟内存,当没有足够的RAM保存系统处理的数据时会将数据写入swap分区
-
当系统缺乏swap空间时,内核会因为RAM内存耗尽而终止进程,配置过多的swap空间会造成存储设备处于分配状态但闲置,造成浪费,过多swap空间还会掩盖内容泄露
-
推荐系统swap空间大小:
1)4G以内swap=内存*2
2)4G-8Gswap=8G
3)8G以上swap=8G
4)根据实际生产环境配置swap空间 -
为了避免临时性的因内存不足导致程序运行失败,采用swap空间可临时顶替内存空间,利用硬盘模拟内存,当然硬盘并不能真正模拟内存,swap空间的意思是将内存中已经有的旧的数据,而这些就的数据在当前并不是即时需要处理,但此时需要运行的软件程序又需要很大的内存资源,此时就将那些特别旧的数据临时存至硬盘中,即放至swap空间中。这样不会因为临时的内存不足导致程序运行失败。
[root@centos7 ~]# free -h 查看当前内存空间及swap
total used free shared buff/cache available
Mem: 1.8G 348M 1.0G 12M 406M 1.2G
Swap: 4.0G 0B 4.0G
挂载swap
-
基本设置包括:
• 创建交换分区或者文件
• 使用mkswap写入特殊签名
• 在/etc/fstab文件中添加适当的条目
• 使用swapon -a 激活交换空间 -
启用:swapon
swapon [OPTION]… [DEVICE]
-a:激活所有的交换分区
-p PRIORITY:指定优先级
/etc/fstab 在第4列中:pri=value -
禁用:swapoff [OPTION]… [DEVICE]
swap优先级
-
可以指定swap分区0到32767的优先级,值越大优先级越高
-
如果用户没有指定,那么核心会自动给swap指定一个优先级,这个优先级从-1开始,每加入一个新的没有用户指定优先级的swap,会给这个优先级减一
-
先添加的swap的缺省优先级比较高,除非用户自己指定一个优先级,而用户指定的优先级(是正数)永远高于核心缺省指定的优先级(是负数)
-
优化性能:分布存放,高性能磁盘存放
swap实验:
Linux上使内存瞬间需求2G(模拟大软件,极其消耗内存)
[root@centos6 ~]#dd if=/dev/zero of=/dev/null bs=2G count=1
可以看到swap空间已经启用啦,若瞬间需求大于内存+swap空间,程序将无法运行,直接报错
[root@centos6 ~]#free -h
total used free shared buffers cached
Mem: 979M 915M 64M 52K 648K 7.6M
-/+ buffers/cache: 907M 72M
Swap: 2.0G 266M 1.7G
[root@centos6 ~]#dd if=/dev/zero of=/dev/null bs=4G count=1
dd: memory exhausted (内存不足)
添加swap空间
①创建swap文件系统:
mkswap /dev/sdb2 swap分区里面比较干净,简单,大致相当于一块干净硬盘
②修改分区类型:
fdisk:t 82
③修改/etc/fstab文件;将创建的swap分区写入
UUID=20df3e22-e2c3-428a-86ce-a1946f4f8988 swap swap defaults 0 0
④swapon -s 查看目前正在使用swap分区
⑤swapon -a 添加swap分区空间
⑥[root@centos7 ~]# swapon -s
Filename Type Size Used Priority(优先级)
/dev/sda3 partition 4194300 0 -2
/dev/sdb2 partition 4194300 0 -3
⑦[root@centos7 ~]# free -h
total used free shared buff/cache available
Mem: 1.8G 361M 1.0G 12M 412M 1.2G
Swap: 8.0G 0B 8.0G
此时swap空间已经增加
修改swap优先级修改/etc/fstab文件对应的swap中defaults,pri=10
UUID=... swap swap defaults,pri=10 0 0
手动指定swap优先级
删除swap步骤:
①禁用swap:在禁用时,一定确保没有程序正在使用此swap
swapoff /dev/sdb2(若有程序正在使用此分区,将等此分区被释放此命令才能执行)
②删除/etc/fstab 中对应的一行记录
③swap分区若不想使用,也可以将swap分区修改
使用文件做swap分区与使用分区做swap分区
系统创建时也可以使用文件做swap分区,因为可以对文件创建文件系统,然后对文件创建swap文件系统
在/etc/fstab写下一行记录也是可以作为swap分区,(创建系统时忘了分配swap分区,可以考虑使用)
文件作为swap分区的优势:
可以移动,可以改变大小,性能较差
分区作为swap分区:
大小固定,性能较好,推荐使用
移动介质
-
挂载意味着使外来的文件系统看起来如同是主目录树的一部分
-
访问前,介质必须被挂载
-
摘除时,介质必须被卸载
-
按照默认设置,非根用户只能挂载某些设备(光盘、DVD、软盘、USB等等)
-
挂载点通常在/media 或/mnt下
使用光盘
-
在图形环境下自动启动挂载/run/media/ <user>/ <label>
mount /dev/cdrom /mnt/ -
操作光盘:
eject 弹出光盘
eject -t 弹入光盘 -
创建ISO文件
cp /dev/cdrom /root/centos.iso
mkisofs -r -o /root/etc.iso /etc -
刻录光盘
wodim –v –eject centos.iso
挂载USB介质
-
查看USB设备是否识别
lsusb -
被内核探测为SCSI设备
/dev/sdaX、/dev/sdbX或类似的设备文件 -
在图形环境中自动挂载
图标在[计算机]窗口中创建
挂载在/run/media// -
手动挂载
• mount /dev/sdb1 /mnt
相关命令
df命令
- 文件系统空间占用等信息的查看工具
df [OPTION]… [FILE]…
-H 以10为单位
-T 文件系统类型
-h human-readable
-i inodes instead of blocks
-P 以Posix兼容的格式输出
[root@centos7 ~]# df (df 查看的block表示1K)
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/sda2 104806400 4726204 100080196 5% /
[root@centos7 ~]# df -hT <-hT选项><H是以1000进制为磁盘单位 磁盘单位为1024>
Filesystem Type Size Used Avail Use% Mounted on
/dev/sda2 xfs 100G 4.6G 96G 5% /
[root@centos7 ~]# df -P <此选项是若出现文件系统名称比较长时,不换行,格式对其显示>
特意构建一个设备名较长的设备:
[root@centos6 ~]#mknod /dev/sda111`echo {a..z}|tr -d ' '` b 8 6
此时使用df名将发生错行:
[root@centos6 ~]#df -h
Filesystem Size Used Avail Use% Mounted on
....
/dev/sda111abcdefghijklmnopqrstuvwxyz
988M 1.3M 935M 1% /mnt
[root@centos6 ~]#df -h /mnt/
Filesystem Size Used Avail Use% Mounted on
/dev/sda111abcdefghijklmnopqrstuvwxyz
988M 1.3M 935M 1% /mnt
[root@centos6 ~]#df -h /mnt/ |wc -l
3
此时脚本中统计分区利用率就会使得命令运行出错
使用-P选项:<不会出现换行>
[root@centos6 ~]#df -hP
Filesystem Size Used Avail Use% Mounted on
/dev/sda111abcdefghijklmnopqrstuvwxyz 988M 1.3M 935M 1% /mnt
<centos7好像不会出现换行现象>
du命令
- 查看某目录总体空间占用状态
du [OPTION]… DIR
-h human-readable
-s summary
–max-depth=# 指定最大目录层级
1、du - 默认会列出每个子目录所占空间,默认显示单位为K
2、du - 统计的只是目录的大小,du 与 df统计时有所出入,df默认还包含磁盘分区元数据和数据元数据大小
3、创建空洞文件:<即稀疏文件><将在虚拟化中会使用此稀疏文件>
[root@centos6 data]#du -sh
4.0K .
[root@centos6 data]#dd if=/dev/zero of=/data/f1 bs=1G count=0 seek=10
0+0 records in
0+0 records out
0 bytes (0 B) copied, 0.000293407 s, 0.0 kB/s
[root@centos6 data]#du -sh
4.0K .
[root@centos6 data]#ls
f1 此f1文件有头有尾中间是空的,块位图为0,空间未使用
[root@centos6 data]#ll -h f1
-rw-r--r--. 1 root root 10G Aug 10 19:31 f1
[root@centos6 data]#
使用du|df才能查看出稀疏文件真实所占空间,ll 查看并非稀疏文件的真实空间
dd
-
dd 命令:convert and copy a file
-
用法:
dd if=/PATH/FROM/SRC of=/PATH/TO/DEST bs=# count=#
if=file 从所命名文件读取而不是从标准输入
of=file 写到所命名的文件而不是到标准输出
ibs=size 一次读size个byte
obs=size 一次写size个byte
bs=size block size, 指定块大小(既是是ibs也是obs)
cbs=size 一次转化size个byte
skip=blocks 从开头忽略blocks个ibs大小的块
seek=blocks 从开头忽略blocks个obs大小的块
count=n 复制n个bs
-
conv=conversion[,conversion…] 用指定的参数转换文件
-
转换参数:
-
ascii 转换 EBCDIC 为 ASCII
-
ebcdic 转换 ASCII 为 EBCDIC
-
lcase 把大写字符转换为小写字符
-
ucase 把小写字符转换为大写字符
-
nocreat 不创建输出文件
-
noerror 出错时不停止
-
notrunc 不截短输出文件
-
sync 把每个输入块填充到ibs个字节,不足部分用空(NUL)字符补齐
-
fdatasync 写完成前,物理写入输出文件
-
备份MBR
dd if=/dev/sda of=/tmp/mbr.bak bs=512 count=1 -
破坏MBR中的bootloader
dd if=/dev/zero of=/dev/sda bs=64 count=1 seek=446 -
有一个大与2K的二进制文件fileA。现在想从第64个字节位置开始读取,需要读
取的大小是128Byts。又有fileB, 想把上面读取到的128Bytes写到第32个字节开
始的位置,替换128Bytes,实现如下
dd if=fileA of=fileB bs=1 count=128 skip=63 seek=31 conv=notrunc -
备份:
dd if=/dev/sdx of=/dev/sdy
将本地的/dev/sdx整盘备份到/dev/sdy
dd if=/dev/sdx of=/path/to/image
将/dev/sdx全盘数据备份到指定路径的image文件
dd if=/dev/sdx | gzip >/path/to/image.gz
备份/dev/sdx全盘数据,并利用gzip压缩,保存到指定路径 -
恢复:
dd if=/path/to/image of=/dev/sdx
将备份文件恢复到指定盘
gzip -dc /path/to/image.gz | dd of=/dev/sdx
将压缩的备份文件恢复到指定盘 -
拷贝内存资料到硬盘
dd if=/dev/mem of=/root/mem.bin bs=1024
将内存里的数据拷贝到root目录下的mem.bin文件 -
从光盘拷贝iso镜像
dd if=/dev/cdrom of=/root/cd.iso
拷贝光盘数据到root文件夹下,并保存为cd.iso文件 -
销毁磁盘数据
dd if=/dev/urandom of=/dev/sda1
利用随机的数据填充硬盘,在某些必要的场合可以用来销毁数据,执行此操作以后,/dev/sda1将无法挂载,创建和拷贝操作无法执行
将/目录下的目标迁移至新的分区;(例如/home越来越大,需要将/home单独迁移出去独立分区)
①新建磁盘分区
②创建文件系统;同步磁盘
!!考虑到可能复制时,有人正在使用目录,应该先进入维护模式(即单用户模式)
!!单用户模式没有网络,需要在机房操作,但是应该支持的是让所有用户不能访问即可
③临时挂载至/下某目录,将要迁移的文件复制(-a保留文件原有属性)新建分区中
④在/etc/fstab中添加一条记录,使要迁移的目录与新分区自动挂载
⑤此时/下原本目录中的内容被隐藏,过一段时间待系统稳定,没出问题
⑥将原本/下目录原有被隐藏的文件删除
⑥将分区重新挂载回去;生效使用