1、设备文件
设备文件:关联至一个设备驱动程序,进而能够跟与之对应硬件设备进行通信
设备号码:
主设备号major number,标识设备类型
次设备号minor number,标识同一类型下的不同设备
[root@localhost ~]# ll /dev/sd*
brw-rw—-. 1 root disk 8, 0 Aug 25 09:04 /dev/sda
brw-rw—-. 1 root disk 8, 1 Aug 25 09:04 /dev/sda1
brw-rw—-. 1 root disk 8, 2 Aug 25 09:04 /dev/sda2
其中8是主设备号,0/1/2分别是次设备号
2、硬盘存储术语
head:磁头
track:磁道
cylinder: 柱面
secotr: 扇区,512bytes
整个磁盘:512*63*1024*256=一个磁道63个扇区,一个盘片盘面1024个磁道,256个磁头即是256个盘面
一个柱面:512*63*256
Centos6.8是按柱面为单位划分分区
centos7.2是按照扇区为单位划分分区大小,但用命令fdisk的-u=cylinders选项可查按柱面为单位分区情况
3、MBR分区
1)、MBR: Master Boot Record,1982年,使用32位表示扇区数,分区不超过2T,按柱面进行分区
0磁道0扇区:512bytes
446bytes: boot loader主引导程序引导启动
64bytes: 分区表,其中16bytes标识一个分区(扩展分区下的每个逻辑分区前都有一个扇区EBR)
2bytes: 55aa 结束标示位,表示这是一个主引导记录,没有55aa表示没有分区表,是个裸盘
2)、MBR的数据备份
[root@localhost ~]# echo "- – -">/sys/class/scsi_host/host2/scan 添磁盘后触发磁盘生成-例lsblk可查
[root@centos7 ~]# hexdump -C -n 512 /dev/sda 查看磁盘a的最前512个字节的信息
[root@localhost ~]# dd if=/dev/sdb of=/root/mbrb bs=1 count=512 备份b磁盘的MBR信息
[root@localhost ~]# dd if=/root/mbrb of=/dev/sdb 恢复b磁盘的MBR信息
[root@localhost ~]# dd if=/root/mbrb of=/dev/sdc
若b磁盘中扩展分区里面有逻辑分区,那么逻辑分区的信息不能恢复给c磁盘
[root@localhost ~]# dd if=/dev/zero of=/dev/sdb bs=1 count=446
其是b磁盘中最前面MBR的446个字节数据被零覆盖,但是b磁盘的分区表因是由接下来的64个字节决定,所以其分区表信息并没有被破坏
[root@localhost ~]# dd if=/dev/zero of=/dev/sdb bs=1 count=64 skip=446 seek=446
跳过/dev/sdb文件开头的446个字节用零覆盖后续的64个字节,清除了b磁盘的分区表信息
4、GPT分区
GPT:GUID patition table 支持128个分区,使用64 位扇区,支持8Z、64Z
使用128 位UUID表示磁盘和分区
GPT分区表自动备份在头和尾两份,并有CRC 校验位
EFI部分又可以分为4个区域:EFI信息区(GPT头)、分区表、GPT分区、备份区域
UEFI (统一扩展固件接口) 硬件支持GPT
5、管理分区
1)、列出块设备:
#lsblk
#ls /dev/sd*
#car /proc/partitions
以上查看内存中识别的已经生效的分区信息,而不是磁盘上已进行的分区信息
#fdisk -l 查看磁盘上的分区情况而不是内存中的已生效的分区情况
2)、创建分区:
fdisk 创建MBR分区,也支持GPT ,对于一块硬盘最多只能管理15 分区
gdisk 创建GPT分区
parted 高级分区操作(创建、复制、调整大小等等),非交互式分区工具,实时生效的,使用上小心
#fdisk /dev/sdb
#gfisk /dev/sdb
子命令:
p 分区列表
t 更改分区类型
n 创建新分区
d 删除分区
w 保存并退出
q 不保存退出
parted命令
用法:parted [ 选项]… [设备 [命令 [ 参数]…]…]
parted /dev/sdb mklabel gpt|msdos
指定磁盘标签也即分区表是GPT格式还是msdos格式
parted /dev/sdb print
查看b磁盘的分区情况
parted /dev/sdb mkpart primary 1 200
其中的1 200是指分区大小从1M-200M
parted /dev/sdb rm 1
删除b磁盘上1号分区
parted –l 相当于fdisk -l
3)、通知内核重新读取硬盘分区表
新增分区同步(但是新磁盘的新增分区信息会自动更新进入内存,不用再使用以下命令更新)
partx -a /dev/DEVICE
kpartx -a /dev/DEVICE -f
删除分区同步,要指定删除要同步的分区号
centos6:
partx -d –nr N-M /dev/DEVICE
CentOS 5,7:增删同步都使用#partprobe [/dev/DEVICE]
6、文件系统
文件系统是操作系统用于明确存储设备或分区上的文件的方法和数据结构,即在存储设备上组织文件的方法。操作系统中负责管理和存储文件信息的软件结构称为文件管理系统,简称文件系统。
从系统角度来看,文件系统是对文件存储设备的空间进行组织和分配,负责文件存储并对存入的文件进行保护和检索的系统。具体地说,它负责为用户建立文件,存入、读出、修改、转储文件,控制文件的存取、安全控制、日志、压缩、加密等。
1)、文件系统类型:
Linux文件系统: ext2, ext3, ext4, xfs(SGI), btrfs(oracle), reiserfs, jfs(AIX ), swap
swap:交换分区文件系统
光盘的文件系统:iso9660
Centos5中使用的是ext3,centos6中使用的是ext4,而centos7使用的是xfs
Windows:fat32, ntfs
Unix: FFS(fast), UFS(unix), JFS2
网络文件系统:NFS, CIFS
集群文件系统:GFS2, OCFS2(oracle)
分布式文件系统:ceph, moosefs, mogilefs, glusterfs,Lustre
RAW:未经处理或者未经格式化产生的文件系统
2)、文件系统分类:
根据其是否支持"journal" 功能:
日志型文件系统: ext3, ext4, xfs, …
非日志型文件系统: ext2, vfat
根据文件系统的组成部分:
内核中的模块:ext4, xfs, vfat
用户空间的管理工具:mkfs.ext4, mkfs.xfs, mkfs.vfat
Linux的虚拟文件系统:VFS,介于用户与各种真实文件系统之间,便于开发人员开发各种软件程序
查看当前系统支持的文件系统:cat /proc/filesystems
文件系统选择:要考虑文件系统的支持分区种类,例如是否支持root分区、boot分区等等,还有就是支持的分区大小限制等等,其中ext4文件系统兼容ext3和ext2
7、创建文件系统
mkfs 命令:
# mkfs.FS_TYPE /dev/DEVICE
# mkfs -t FS_TYPE /dev/DEVICE
#mkfs -L 'LABEL' /dev/DEVICE 设定卷标
ext4
xfs
btrfs
vfat 此文件系统相对比较简单
[root@localhost ~]# mkfs -t vfat /dev/sdc3
mkfs.vfat 3.0.9 (31 Jan 2010)
[root@localhost ~]# blkid
/dev/sdc3: UUID="3004-B6E2" TYPE="vfat"
[root@localhost ~]# mkdir /mnt/sdc3
[root@localhost ~]# mount /dev/sdc3 /mnt/sdc3
[root@localhost ~]# df
[root@localhost ~]# cd /mnt/sdc3
[root@localhost sdc3]# touch fi
[root@localhost sdc3]# echo xxx>fi
[root@localhost sdc3]# ll
total 4
-rwxr-xr-x. 1 root root 4 Aug 28 17:58 fi 普通文件自动加上执行权限
[root@localhost sdc3]# cat fi
xxx
[root@localhost sdc3]# cat FI 不区分大小写
xxx
[root@localhost sdc3]# tune2fs -l /dev/sdc3
tune2fs 1.41.12 (17-May-2010)
tune2fs: Bad magic number in super-block while trying to open /dev/sdc3
Couldn't find valid filesystem superblock.
8、创建ext文件系统,只支持ext系列文件系统,但是其选项与mkfs通用
mke2fs:ext系列文件系统专用管理工具
#mke2fs /dev/sdb1 默认格式化/dev/sdb1为ext2文件系统
-t {ext2|ext3|ext4} 创建ext3,在blkid命令显示中有点不同于其他文件系统类型
-L 'LABEL' 卷标建议设定为挂载点
[root@localhost ~]# mke2fs -t ext3 -L "/mnt/sdc2" /dev/sdc2
[root@localhost ~]# blkid
/dev/sdc2: LABEL="/mnt/sdc2" UUID="510ba083-c8a2-4e21-8d8c-b5b192029377" SEC_TYPE="ext2"TYPE="ext3"
-j: 相当于 -t ext3
mkfs.ext3 = mkfs -t ext3 = mke2fs -j = mke2fs -t ext3
-b {1024|2048|4096} 只能选择左三种值之一设定块大小,块是存储文件的最小单位,块是分组管理的(就像公司比较大,要分部门、职能管理是一个道理,主要是为了便于管理数据),每个分区的第一个块是为超级块,超级块存储文件系统的元数据比如文件系统的块大小、各个块组的起始位置等等,超级块信息在创建文件系统时自动备份多份
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912
#mk2fs -t ext4 -b 1024 /dev/sdb1
-i #:为数据空间中每多少字节创建一个inode(每个文件唯一性的数字编号,inode数量应该适当,每个inode指定其标记文件的元数据信息);此大小不应该小于block的大小,大小范围为128-4096且为128的整数倍
#mkfs.ext4 -i 1024 /dev/sdb1 指定每1024个字节创建一个inode
-N #:为数据空间创建个多少个inode
#mkfs.ext4 -N 40363 /dev/sdb1 为分区/dev/sdb1指定了40363个inode
-m #:默认5%, 为管理人员预留空间占总空间的百分比
-O FEATURE[,…]:启用指定特性
-O ^FEATURE:关闭指定特性,例如has_journal日志功能
8、文件系统标签-指向设备的与设备无关另一种方法
blkid:块设备属性信息查看,即是块设备的标签、uuid、文件系统类型等等信息
blkid [OPTION]… [DEVICE]
-U UUID: 根据指定的UUID来查找对应的设备
-L LABEL:根据指定的LABEL来查找对应的设备
e2label:管理ext系列文件系统的LABEL,即是给ext系列文件系统添加或者查看其标签
# e2label DEVICE [LABEL] 加卷标或者查看卷标
# e2label /dev/sdb1 查看卷标
# e2label /dev/sdb1 /mnt/sdb1 加卷标
findfs:查找指定的LABEL或者UUID对应的分区
#findfs [options] LABEL=<label>
#findfs [options] UUID=<uuid>
[root@localhost ~]# findfs UUID=510ba083-c8a2-4e21-8d8c-b5b192029377
/dev/sdc2
9、tune2fs命令-重新设定ext系列文件系统可调整参数的值
-l:查看指定文件系统超级块信息super block
#tune2fs -l /dev/sdc2
[root@localhost ~]# tune2fs -l /dev/sdc2
tune2fs 1.41.12 (17-May-2010)
Filesystem volume name: /mnt/sdc2
Last mounted on: <not available>
Filesystem UUID: 510ba083-c8a2-4e21-8d8c-b5b192029377
Filesystem revision #: 1 (dynamic)
Filesystem features: has_journal ext_attr resize_inode dir_index filetype sparse_super large_file
Filesystem flags: signed_directory_hash
Default mount options: (none)
Filesystem state: clean
Errors behavior: Continue
Filesystem OS type: Linux
Inode count: 197600
Block count: 789193
Reserved block count: 39459为管理人员预留空间占总空间百分之五,以防数据空间用完,管理员无法管理
Free blocks: 759222
Free inodes: 197589
First block: 0
Block size: 4096
Blocks per group: 32768
Fragments per group: 32768
Inodes per group: 7904
Inode blocks per group: 494
Filesystem created: Sun Aug 28 16:53:19 2016
Last mount time: n/a
Last write time: Sun Aug 28 16:53:20 2016
Mount count: 0 命令可以挂载,开机也会自动挂载一次,其中-C选项可以更改当前挂载次数
Maximum mount count: 29 挂载次数达到最大挂载次数后,文件系统自检,其中-c可以更改最大挂载次数
Last checked: Sun Aug 28 16:53:19 2016
Check interval: 15552000 (6 months)
Next check after: Fri Feb 24 16:53:19 2017
First inode: 11
Inode size: 256
Journal inode: 8
-L 'LABEL':修改卷标
-U UUID: 修改UUID号
-m #:修预留给管理员的空间百分比
-j: 将ext2升级为ext3
-O: 文件系统属性启用或禁用,–O ^has_journal
-o: 调整文件系统的默认挂载选项,–o ^acl
(Centos7.2在创建文件系统时自动有acl功能;但是Centos6需要手动加acl功能,但是若挂载后则要重新挂载才能生效)
#tune2fs -o user_xattr /dev/sdb1
#tune2fs -o acl /dev/sdb1
dumpe2fs:
#dumpe2fs /dev/sdb1 查看sdb1分区的超级块、超级块备份及块组信息
-h:查看超级块信息
10、文件系统检测和修复,但是物理磁盘的损坏不能修复-文件系统损坏常发生于死机或者非正常关机之后
文件系统破坏时,查看超级块信息,其中文件系统状态标记为“dirty”或者“no clean”
fsck: File System Check
fsck.FS_TYPE DEVICE
#fsck /dev/sdb1
#fsck.ext4 /dev/sdb1
fsck -t FS_TYPE DEVICE
-a: 自动修复错误
-r: 交互式修复错误
注意: FS_TYPE 一定要与分区上已经文件类型相同
e2fsck: ext系列文件专用的检测修复工具
-y:自动回答为yes
-f:强制修复
11、挂载mount–只有管理员有权限执行,临时挂载
挂载:将额外文件系统与根文件系统某现存目录建立起关联关系,进而使得此目录作为其访问入口的行为
卸载:解除此关联关系的过程
挂载点目录下原有文件在挂载完成后会被临时隐藏,所以挂载点目录一般要为空
挂载方法:mount DEVICE MOUNT_POINT
此挂载后,/etc/mtab默认更新,如下:
#mount通过查看/etc/mtab 文件显示当前已挂载的所有设备,包括挂载的选项也能看到
也即是#mount与#cat /etc/mtab等价
此外应用#cat /proc/mounts也可以查看到已挂载设备及挂载选项,因为其查看的是内核追踪到的挂载
mount [-fnrsvw] [-t vfstype] [-o options] device dir
其中device指明要挂载的设备,如下:
(1)设备文件:例如/dev/sda5
(2)卷标:-L 'LABEL', 如 例如 -L 'MYDATA'
(3)UUID, -U 'UUID'如 :例如 -U '0c50523c-43f1-45e7-85c0-a126711d406e'
(4)伪文件系统名称:proc, sysfs, devtmpfs, configfs
例如#mount tmpfs /dev/shm
dir:挂载点
事先存在,建议使用空目录,否则挂载点目录下原有文件在挂载完成后会被临时隐藏
进程正在使用中的设备无法被卸载
mount 常用命令选项:
-t vsftype :指定要挂载的设备上的文件系统类型
-r: readonly,只读方式挂载,若果认为一些磁盘很重要只能读不能改写,就可以这样设置
-w: read and write, 读写方式挂载,其实默认挂载就是可读可写挂载
-n: 不更新/etc/mtab,相当于不更新#mount
且#df也不显示挂载信息,但是#cat /proc/mounts可以查看本次挂载设备
-L 'LABEL':以卷标指定挂载设备
-U 'UUID':以UUID 指定要挂载的设备
-B, –bind:绑定目录到另一个目录上
[root@localhost ~]# mount -B /testdir/b1 /mnt/b1
-a:自动挂载所有支持自动挂载的设备( 定义在了/etc/fstab文件中,且挂载选项中有auto 功能)
-o options:( 挂载文件系统的选项),多个选项使用逗号分隔,但是都是临时有效的,除非写入/ect/fstab中
async:异步模式
sync:同步模式, 内存更改时,同时写磁盘,可避免数据丢失,但是服务器性能下降
atime/noatime:包含目录和文件
atime时间更新的两种情况:查看已经一天以上或者mtime时间较atime时间离当前更近
diratime/nodiratime:只对目录的访问时间戳
auto/noauto:是否支持自动挂载, 配合-a 选项使用
exec/noexec:是否支持在此文件系统上运行应用程序,例如此文件系统上的fi.sh是否可以运行;当U盘等外来设备挂载时可以使用该选项,防止非法程序的运行,减免风险
dev/nodev:是否支持在此文件系统上使用设备文件
suid/nosuid:不否支持suid 和sgid 权限,默认nosuid
remount:重新挂载使挂载选项生效
#mount -o remount /dev/sdb1
#mount -o ro,acl remount /dev/sdb1
ro:只读
rw:读写
#mount –o ro,remount /dev/sdc3 /mnt/sdc3
user/nouser:是否允许普通用户挂载此设备,默认管理员才能挂载
acl/noacl:启用或者禁用此文件系统上的acl功能
Defaults:相当于rw, suid, dev, exec, auto, nouser, async
13、卸载命令
1)、查看挂载情况
#findmnt MOUNT_POINT
2)、查看正在访问指定文件系统的进程
#lsof MOUNT_POINT
#fuser -v MOUNT_POINT
3)、终止所有在正访问指定的文件系统的进程,一般要提前发通知提醒
# fuser -km MOUNT_POINT
4)、卸载-umount命令只有管理员有权限运行
# umount DEVICE 若果设备挂载于多个目录,将全部取消挂载
# umount MOUNT_POINT 仅取消对应挂载点上的挂载,若挂载点上有几个挂载设备,则取消最近的挂载
14、挂载点和/etc/fstab,其中/etc/fstab是挂载的配置文件,写入此文件中的挂载是永久挂载
写入配置文件时,可以在设备栏使用文件系统卷标
使用mount -a 命令挂载/etc/fstab中的所有文件系统,也就是没有挂过会进行挂载,但是挂载过后不再挂载,所以要修改配置文件中已挂载文件系统的挂载选项,就要使用例如#mount -o remount /dev/sdb1重新挂载生效
/etc/fstab 每行定义一个要挂载的文件系统,每行内容依次为:要挂载的设备或伪文件系统、挂载点、文件系统类型、挂载选项、转储频率、自检次序
其中要挂载的设备或伪文件系统可以写为:设备文件、LABEL="" 、UUID=""、伪文件系统名称(如proc,sysfs)
挂载选项:defaults或者选择其他文件系统选项
转储频率:
0 :不做备份
1 :每天转储备份
2 :每隔一天转储备份
自检次序(开机时是否检测文件系统的完整性,即是否自动执行fsck,如配置信息某设备的UUID有错误,在设置启动自检情况下,系统不能正常启动):
0 :不自检,一般设置为不自检,以免在配置信息发生错误的情况下系统不能正常启动
1 :首先自检,一般只有rootfs才用1
挂载文件作为分区使用:
[root@localhost ~]# dd if=/dev/zero of=/testdir/partfile bs=1M count=500
500+0 records in
500+0 records out
524288000 bytes (524 MB) copied, 7.63616 s, 68.7 MB/s
[root@localhost ~]# mkdir /mnt/partfile
[root@localhost ~]# mkfs.ext4 /testdir/partfile
mke2fs 1.41.12 (17-May-2010)
/testdir/partfile is not a block special device.
Proceed anyway? (y,n) y 但是创建文件系统后,在#blkid中并不显示此文件设备文件系统的属性信息
[root@localhost ~]# mount /testdir/partfile /mnt/partfile
mount: /testdir/partfile is not a block device (maybe try `-o loop'?)
[root@localhost ~]# mount /testdir/partfile /mnt/partfile -o loop
或者把/testdir/partfile /mnt/partfile ext4 loop 0 0写入/etc/fstab配置文件中永久挂载
此时挂载选项为loop
使用#mount可以查看此文件设备在挂载时自动默认映射到loop=/dev/loop0
#losetup /dev/loop2 /testdir/partfile 强行指定/dev/loop2代表/testdir/partfile
#mount /dev/loop2 /mnt/partfile 那么此命令相当于挂载/testdir/partfile,此文件设备挂载映射到loop2
#losetup –a可以查看loop的对于代表设备
#lsblk可知/testdir/partfile是以loop0挂载的
#ll /dev/l*可以查看当前系统默认有多个loop设备供使用
目录挂目录:
#mkdir /mnt/boot
# mount -B /testdir/boot /mnt/boot
或者把/boot /mnt/boot none bind 0 0写入/etc/fstab配置文件中永久挂载
#df不可查看到此目录挂载,目录挂载可以#mount查看挂载
挂载也可以挂载远程网络资源,比如nfs共享:
即是把10.1.0.1:/share /mnt/nfs nfs defaults 0 0写入/etc/fstab配置文件中永久挂载
15、交换分区
交换分区是系统RAM 的补充,其是作为内存交换使用的,所以交换分区应该建在高速磁盘中或者新磁盘的最外侧
Swap的挂载用df看不到,可以使用free查看,但是free只能查看总大小,不能查看各个交换分区
可以使用#cat /proc/swaps可以查看那个分区提供了各个swap
基本设置包括:
• 创建交换分区或者文件
• 使用mkswap 写入特殊签名也即是创建swap文件系统
[root@localhost ~]# mkswap -L SWAP_SDE1 /dev/sde1
Setting up swapspace version 1, size = 4200960 KiB
LABEL=SWAP_SDE1, UUID=60df9636-c2b8-4f2c-a065-07b86b1c93e7
[root@localhost ~]# blkid /dev/sde1
/dev/sde1: LABEL="SWAP_SDE1" UUID="60df9636-c2b8-4f2c-a065-07b86b1c93e7" TYPE="swap"
• 在/etc/fstab 文件中添加适当的条目进行挂载而不是使用mount挂载,如下:
UUID="60df9636-c2b8-4f2c-a065-07b86b1c93e7" swap swap defaults,pri=1 0 0
• 使用#swapon -a激活所有交换空间,然后可以使用#swapon -s查看激活生效的各个swap分区
1)、用户可以给某个swap 指定一个0到32767 的优先级;如果用户没有指定,那么内核会自动给swap 指定一个优先级,这个优先级从-1 开始,每加入一个新的没有用户指定优先级的swap ,会给这个优先级减一;先添加的swap 的缺省优先级比较高,除非用户自己指定一个优先级,而用户指定的优先级( 是正数) 永远高于内核缺省指定的优先级( 是负数)。
优化性能:分布存放,高性能磁盘存放
启用:swapon
swapon [OPTION]… [DEVICE]
-a:激活所有的交换分区
#swapon -a
-p PRIORITY:指定优先级或者修改配置文件/etc/fstab挂载选项,例如pri=1
#swapon -p 1 /dev/sdb1 这里/dev/sdb1是一个swap分区
禁用:swapoff [OPTION]… [DEVICE]
若要删除某swap分区,先禁用然后进入配置文件删除相关配置信息 ,再删除相应的swap分区或文件
#swapoff /dev/sdb1
16、移动设备使用-U盘和光盘
1)、访问前,介质必须被挂载,挂载意味着使外来的文件系统看起来如同是主目录树的一部分
例如插上U盘后会自动识别挂载,一般为/dev/sdf1等等,而且系统会自动加载USB模块,加载的模块可以使用#lsmod命令查看
[root@centos7 ~]# lsmod|grep usb
usb_storage 66523 1
然后就可以进行文件的拷贝,但是为了防止数据拷贝缺失,拷贝后可以执行#sync命令使之立即同步数据
摘除时,介质必须被卸载
挂载点通常在/media 或/mnt下
按照默认设置,非根用户只能挂载某些设备(光盘、DVD、软盘、USB 等等)
光盘在图形环境下自动启动挂载/run/media/<user>/<label>
否则就必须被手工挂载
#mount /dev/cdrom /mnt/ 光盘的真实设备名称是/dev/sr0,/dev/cdrom是光盘的软链接
eject 命令卸载或弹出光盘
创建ISO 文件即创建镜像文件
#cp /dev/sr0 /testdir/centos7.iso
#cp /dev/cdrom /root/centos7.iso
若想挂载使用可以如下:
#mkdir /mnt/iso
#mount /testdir/centos7.iso /mnt/iso –o loop
#mkisofs -r -o /root/etc.iso /etc 把目录打包成ISO文件
刻录光盘(要有刻录机):
#wodim –v -eject centos.iso
17、常见工具
1)、内存空间使用状态:
free [OPTION]
-m: 以MB为单位
-g: 以GB
-h: MB和GB为单位
2)、文件系统空间占用等信息的查看工具:
df [OPTION]… [FILE]…
-H: 1000为单位,同下-h
-h: human-readable,以易读方式显示
-T: 文件系统类型
-i:inodes instead of blocks,文件系统节点信息查询
3)、查看某目录总体空间占用状态:
du [OPTION]… DIR
-h: human-readable
-s: summary
[root@centos7 ~]# du -s /etc
29112 /etc
[root@centos7 ~]# du -sh /etc
29M /etc
[root@centos7 ~]# du -h /etc 易读方式查看/etc下一级目录总体空间占用情况
4)、dd 命令:convert and copy a file
#dd if =/PATH/FROM/SRC of=/PATH/TO/DEST
bs=#:block size,复制单元大小
count=#:复制多少个bs
skip=blocks 从开头忽略blocks个ibs 大小的块读取
seek=blocks 从开头忽略blocks个obs大小的块写入
conv=conversion[,conversion…]用指定的参数转换文件
转换参数:
lcase 把大写字符转换为小写字符
ucase 把小写字符转换为大写字符
#dd if=a.txt of=aa.txt conv=ucase 把a.txt的文件数据转换为大写写入aa.txt中,如果aa.txt不存在自动默认创建,但是加上nocreate参数,就不再默认创建,文件aa.txt不存在会报错
notrunc 不截短输出文件
[root@centos7 ~]# echo {a..z}|tr -d ' '>f1
[root@centos7 ~]# echo {a..z}|tr -d ' '>f2
[root@centos7 ~]# dd if=f1 of=f2 bs=1 count=3 skip=5 seek=3
3+0 records in
3+0 records out
3 bytes (3 B) copied, 0.000133773 s, 22.4 kB/s
[root@centos7 ~]# cat f2
abcfgh
意思是:从f1开头跳过5个字节取3个字节,就是fgh,然后把这三个字节写入f2(写入的方法是跳过f2文件中的前三个字节,然后覆盖写入fgh,后面的其它数据不保留)
但若:
[root@centos7 ~]# dd if=f1 of=f2 bs=1 count=3 skip=5 seek=3 conv=notrunc
[root@centos7 ~]# cat f2
abcfghghijklmnopqrstuvwxyz
磁盘拷贝:
dd if=/dev/sda of=/dev/sdb
备份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
有二进制文件 fileA,size>2K ,现在想从第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 工具进行压缩,保存到指定路径的image.gz文件
恢复:
dd if=/path/to/image of=/dev/sdx
将备份文件恢复到指定盘
gzip -dc /path/to/image.gz | dd of=/dev/sdx
将压缩的备份文件恢复到指定盘
从光盘拷贝iso 镜像:
dd if=/dev/cdrom of=/root/cd.iso
拷贝光盘数据到root文件夹下,并保存为cd.iso
销毁磁盘数据:
dd if=/dev/urandom of=/dev/sda1
利用随机的数据填充硬盘,在某些必要的场合可以用来销毁数据。执行此操作以后,/dev/sda1 将无法挂载,创建和拷贝操作无法执行。
得到最恰当的block size块大小:
dd if=/dev/zero bs=1024 count=1000000 of=/root/1Gb.file
dd if=/dev/zero bs=2048 count=500000 of=/root/1Gb.file
dd if=/dev/zero bs=4096 count=250000 of=/root/1Gb.file
dd if=/dev/zero bs=8192 count=125000 of=/root/1Gb.file
通过比较dd 指令输出中所显示的命令执行时间,即可确定系统最佳的block size
测试硬盘读写速度:
dd if=/dev/zero of=/root/1Gb.file bs=1024 count=1000000
通过上述命令输出的执行时间,可以计算出测试硬盘的读写速度
修复硬盘:
dd if=/dev/sda of=/dev/sda
当硬盘较长时间(比如1 ,2 年)放置不使用后,磁盘上会产生消磁点。当磁头读到这些区域时会遇到困难,并可能导致I/O 错误。当这种情况影响到硬盘的第一个扇区时,可能导致硬盘报废。上边的命令有可能使这些数据起死回生,且这个过程是安全,高效的。
原创文章,作者:18612763863,如若转载,请注明出处:http://www.178linux.com/42384