磁盘结构
一.概论
1.操作系统的组成部分:
硬件:
根据冯诺依曼体系,计算机的组成: 运算,控制器:cpu 存储器:主存(ram); io设备: 辅存(rom):持久存储 网卡:提供服务的出入口 显示器:输出设备 键鼠:输入设备 总线: 寻址总线;连接cpu和内存的线缆,32bi 南桥:连接低速设备的线缆,如硬盘,输入输出设备 北桥:连接高速设备的线缆,如cpu,内存
硬盘分类:
机械硬盘: 传统使用机械方式存储的硬盘 固态(ssd): 使用电子方式存储的硬盘 lops:io per second 执行io的次数 固态比机械高几倍 以此评判硬盘的好坏 硬盘大小分类: 机械硬盘:容量大 500G-2T 价格实惠 易损坏 固态硬盘:容量小 120G-512G 价格昂贵 易保存 硬盘接口类型: 个人pc: IDE(ata):并口,133MB/s SATA:串口,第三代:6gbps USB:串口,480MB/s 企业: SCSI:并口 UItrascsl320 320MB/s UItrascsl640 640MB/s SAS:串口 6gbps 并口,同一线缆可以接多块设备 IDE:两个,主,从 SCSI: 宽带:16-1 窄带:8-1 串口:同一线缆只可以接一个设备
rpm:rotations
per minute
磁盘组成
,
机械硬盘结构图:
磁道:track0 扇区:sector 512bytes 柱面:不同盘片相同磁道,分区根据柱面进行分区 平均寻道时间: 短--性能好(磁头旋转,等待磁盘旋转的时间) 5400转 7200转 10000转 转速提高,寻道时间短 SSD组成: U盘的阵列 注:固态硬盘仿照机械硬盘的运作机制,MBR,扇区等
3.设备文件
linux的哲学思想: 一切皆文件 open(),read(),write(),close() 设备类型: 块(block):随机访问,数据交换单位是"块(block)" 字符(character):线性访问,数据交换单位是"字符" 如:/dev/zero /devnull 设备文件:FHS 存放在 /dev/ 设备文件:关联至一个设备的驱动程序,进而能够跟之对应的硬件设备,进行通信(设备的访问入口) 设备号: majir:主设备号,区分设备类型,用于表明设备所需要的驱动程序 minor:次设备号,区分同种类型下的不同设备,是特定设备的访问入口; #crw-rw-rw- 1 root root 1, 7 Aug 26 02:25 full# 创建相同主次设备号,不同设备名称的设备文件,代表同一文件
mknoad命令:创建设备文件命令
make block or chararcter speclal files
mknod [OPTIONS] …NAME TYPE [MAJOR MINOR]
-m MOD E: 创建后的设备文件的访问权限
type:指定类型 c b
[major minor]:指定主次设备号
[root@w7 ~]# mknod qwe c 8 2
[root@w7 ~]# ll
crw-r–r– 1 root root 8, 2 Aug 26 04:59 qwe
mkond qwe1 d 8 1 在当前目录下,建立一个设备文件,把该文件挂载到某文件中,可以访问跟这个文件相同设备号的设备,相当于建立远设备的第二的入口
磁盘设备的设备文件名:/dev/DEV_filename 磁盘接口标识: IDE:/dev/hd 例:/dev/hda /dev/hdc SCSI,SATA,USB,SAS:/dev/sd[a-z] 例:/dev/sda /dev/sdb 分区: /dev/sda#; 例:/dev/sda1 /dev/sdb2 注意:centos6 centos7通通将硬盘设备文件标识为/dev/sd[a-z]# 引用设备方式: 设备文件名,卷标,UUID
磁盘分区
1.为什么磁盘分区?
优化I/O性能 实现磁盘空间配额限制 提高修复速度 隔离系统和程序 安装多个OS 采用不同文件系统
2分区类型
磁盘分区类型为两种:MBR,GPT MBR(Master Boot Record):0 sector,磁盘的0号柱面的0号磁道的0编号扇区被称作MBR;叫做主引导记录,主引导扇区 按柱面分区 分为三个部分:(共512字节) 前面446byets:存放bootloaber,引导启动操作系统的程序; 后边64byets:DPT(Disk Pattition Table),标识硬盘分区表,每16个byets标识一个分区,一共只能有四个分区; 4主分区(小于等于4个) 3主1扩展: n个逻辑分区 最后2byets:MBR区域的有效性标识;55AA为有效; 主分区和扩展分区的标识是:1-4 扩展分区有EBR,记录逻辑分区的分区信息以及下一个EBR的路径 逻辑分区:只能从5开始
GPT:GUID( Globals Unique Identifiers) partitiontable 支持128个分区,使用64位,支持8Z(512Byte/block ) 64Z (4096Byte/block) 使用128位UUID 表示磁盘和分区 GPT分区表自动备份在头和尾两份,并有CRC校验位 UEFI (统一扩展固件接口)硬件支持GPT,使操作系统启动
3.查看分区
图形化:
命令行:
管理分区
创建分区使用:
fdisk 创建MBR分区,也支持GPT,对于一块硬盘,最多只能管理15分区 gdisk 创建GPT分区 GNU parted 高级分区操作(创建、复制、调整大小等等) partprobe-重新设置内存中的内核分区表版本
创建分区:
fdisk工具: fdisk -l [-u] [device...] fdisk提供了一个交互式接口来管理分区,它有许多子命令,分别用于不同的管理功能; 所有操作均在内存中进行,没有直接同步到磁盘;直到使用w命令保存到磁盘上才会生效 选项: -l :查看硬盘信息 加分区名,可查看指定分区,默认是所有分区 不加选项,进入fdisk管理模式: 子命令: a toggle a bootable flag b edit bsd disklabel c toggle the dos compatibility flag d delete a partition 删除分区 g create a new empty GPT partition table G create an IRIX (SGI) partition table l list known partition types 显示分区类型列表 m print this menu 帮助信息 n add a new partition 创建新分区 o create a new empty DOS partition table p print the partition table 分区列表 q quit without saving changes 不保存并退出 s create a new empty Sun disklabel t change a partition's system id 更改分区类型 u change display/entry units v verify the partition table w write table to disk and exit 保存并退出 x extra functionality (experts only) fdisk -l /dev/sda Disk /dev/sda: 128.8 GB, 128849018880 bytes 255 heads, 63 sectors/track, 15665 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x000a50bd Device Boot Start End Blocks Id System /dev/sda1 * 1 26 204800 83 Linux Partition 1 does not end on cylinder boundary. /dev/sda2 26 10469 83886080 83 Linux /dev/sda3 10469 13019 20480000 83 Linux /dev/sda4 13019 15666 21257216 5 Extended /dev/sda5 13019 13280 2097152 82 Linux swap / Solaris 对cenots6来说start是开始柱面,End是结束柱面,对centos7来说start是开始扇区,End是结束扇区 gdisk工具: gfisk /dev/sdb 类fdisk 的专业GPT分区工具
同步分区表:
在创建分区后,系统可能不会识别到新创建的分区,我们只能在不重启设备的情况下,手工识别分区. 注意:在已经分区并且已经挂载其中某个分区的磁盘设备上创建的新分区,内核可能在创建完成后无法直接识别 查看内核是否已经识别新的分区: # cat /proc/partations #lsblk lsblk -f /dev/sd[a-z] 查看分区的文件系统类型 echo "---" > /sys/class/scsi_host/host2scan 刷新硬盘 centos6 echo "---" > /sys/class/scsi_host/host0/scan 刷新硬盘 centos7 通知内核重新读取硬盘分区表 CentOS 5, 7: 使用partprobe Centos 6: 新增分区用 partx -a -n M:N /dev/DEVICE kpartx -a /dev/DEVICE -f: force 删除分区用 partx -d -n M:N /dev/DEVICE centos6: –nr N-M parted命令: parted的操作都是实时生效的,小心使用 用法: parted [选项]... [设备 [命令 [参数]...]...] parted /dev/sdb mklabel gpt|msdos parted /dev/sdb print parted /dev/sdb mkpart primary 1 200 (默认M) parted /dev/sdb rm 1 parted -l
链接文件:访问同一个文件的不同路径;
注意:符号链接文件的大小是其指向的文件的路径字符串的字节数
硬链接:指向同一个inode的多个文件路径, 创建硬链接命令 > - ln src link_file,ln 目标文件(原文件) 新创建的文件 > - 支持-v选项,显示创建过程 特性 > - (1)目录不支持硬链接 > - (2)硬链接不能跨文件系统 > - (3)创建硬链接会增减inode引用计数 符号连接:指向一个文件路径的另一个文件路径, 创建软链接的命令 > - ln -s src link_file,ln -s 目标文件(原文件) 新创建的文件) > - 支持-v选项,显示创建过程 特性 > - (1)符号链接与文件是两个各自独立的文件,各有自己的inode,对原文件创建符号链接不会增加引用计数 > - (2)支持对目录创建符号链接,可以跨文件系统 > - (3)删除符号链接不影响原文件,但删除原文件,符号指定的路径即不存在,此时会变成无效链接
管理文件系统
文件系统是操作系统用于明确存储设备或分区上的文件的方法和数据结构;即在存储设备上组织文件的方法。 操作系统中负责管理和存储文件信息的软件结构称为文件管理系统,简称文件系统。 从系统角度来看,文件系统是对文件存储设备的空间进行组织和分配,负责文件存储并对存入的文件进行保护和检索的系统。 具体地说,它负责为用户建立文件,存入、读出、修改、转储文件,控制文件的存取,安全控制,日志,压缩,加密等
1.文件系统类型
Linux文件系统: : ext2(Extended file system), ext3,ext4, xfs SGI) , btrfs( Oracle) , reiserfs, jfs(AIX) , swap 光盘: iso9660 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 内核文件系统的组成部分: lsmod:查看当前系统内核已经装载的模块 文件系统驱动:由内核提供 文件系统管理工具:由用户空间的应用程序提供 查前支持的文件系统: cat /proc/filesystems Linux的虚拟文件系统: VFS
文件系统的选择: 根据存储数据的单个文件大小,及数据类型 首先要有日志,ext2,vfat可以淘汰了。 其次是看各自优势,jfs似乎没有明显的优点,果断还是直接用ext4省心。 XFS大文件速度快,reiserfs 作者杀妻子进去了基本等于死掉了,小文件性能是很不错的。 fuse系列的文件系统不算原生的,但是如果有特别需求(比如ntfs、aufs)还是考虑使用一下。 本地两个杀手级别的文件系统btrfs和zfs,都属于开发中的(虽说已经production ready了),目前并没有广泛使用。
3.创建文件系统
格式化:低级格式化,(分区之前进行,划分磁道)高级格式化(分区之后对分区进行,创建文件系统) 元数据区,数据区 元数据区:inode(index node) 文件:文件,大小权限,从属关系,时间戳,数据块指针... 符号链接文件:存储数据指针的空间当中存储的是真实文件的访问路径; 设备文件:存储数据指针的空间当中存储的是设备号(major,minor) 磁盘在划分完元数据区和数据区以后要在数据去预留一段空间(工作空间)供超级用户使用,在磁盘空间饱满后用此段空间进行管理;删除,整理。。。。。 位图索引:每个inode号和每个磁盘数据块都需要位图索引来判断是否被占用,位图为0表示此位图对应的inode号或者数据块为空闲,1表示占用
mkfs命令:
(1) # mkfs.FS_TYPE /dev/DEVICE
ext4
xfs
btrfs
vfat
(2) # mkfs -t FS_TYPE /dev/DEVICE
-L 'LABEL': 设定卷标
-i #: 为数据空间中每多少个字节创建一个inode;此大小不应该小于block的大小
-N #:为数据空间创建个多少个inode
-I 一个inode记录大小128—4096
-m #: 默认5%,为管理人员预留空间占总空间的百分比
-O FEATURE[,…]:启用指定特性
-O ^FEATURE:关闭指定特性
mke2fs: ext系列文件系统专用管理工具
-t {ext2|ext3|ext4}
-b {1024|2048|4096}
-L 'LABEL'
-j: 相当于 -t ext3
mkfs.ext3 = mkfs -t ext3 = mke2fs -j = mke2fs -t ext3-i #: 为数据空间中每多少个字节创建一个inode;此大小不应该小于block的大小
-N #:为数据空间创建个多少个inode
-I 一个inode记录大小128—4096
-m #: 默认5%,为管理人员预留空间占总空间的百分比
-O FEATURE[,…]:启用指定特性
-O ^FEATURE:关闭指定特性
centos6 默认不支持xfs 如果要安装得先安装xfsprogs工具
windows无法识别linux的文件系统;因此,存储设备需要两种系统之间交叉使用时,应该使用windows和linux同时支持的文件系统;fat32(vfat);
mkfs.vfat device
4.文件系统管理工具
blkid:块设备属性信息查看
blkid [OPTION]… [DEVICE]
-U UUID: 根据指定的UUID来查找对应的设备
-L LABEL:根据指定的LABEL来查找对应的设备
[root@w7 ~]# blkid /dev/sdc1: LABEL="qwecz" UUID="88c0011a-e573-4719-9757-b6e60ccfc08f" TYPE="ext4" PARTUUID="d44b6ba9-b442-469d-9dca-25a0e687f131" /dev/sdc2: UUID="12fe07e9-665d-485b-b040-10817289820c" TYPE="ext4" PARTUUID="0a301313-291d-4112-b13f-cd92c268274a" /dev/sda1: UUID="6c3c827d-60c8-4778-b9b0-439da928a614" TYPE="xfs" /dev/sda2: UUID="820ccbbb-45e5-4a16-89cc-7deeab7b6fdd" TYPE="xfs" /dev/sda3: UUID="a456c4bc-bb4d-4001-91e1-99a09f61943a" TYPE="swap" /dev/sr0: UUID="2015-12-09-22-36-30-00" LABEL="CentOS 7 x86_64" TYPE="iso9660" PTTYPE="dos" [root@w7 ~]# blkid -U a456c4bc-bb4d-4001-91e1-99a09f61943a /dev/sda3 [root@w7 ~]# blkid -L qwecz /dev/sdc1 /dev/sdc1
uuidgen:可随机生成UUID
findfs :查找分区,
findfs [options] LABEL=label
findfs [options] UUID=uuid
[root@w7 ~]# blkid /dev/sdc1: LABEL="qwecz" UUID="88c0011a-e573-4719-9757-b6e60ccfc08f" TYPE="ext4" /dev/sdc2: UUID="12fe07e9-665d-485b-b040-10817289820c" TYPE="ext4" /dev/sda1: UUID="6c3c827d-60c8-4778-b9b0-439da928a614" TYPE="xfs" /dev/sda2: UUID="820ccbbb-45e5-4a16-89cc-7deeab7b6fdd" TYPE="xfs" /dev/sda3: UUID="a456c4bc-bb4d-4001-91e1-99a09f61943a" TYPE="swap" /dev/sr0: UUID="2015-12-09-22-36-30-00" LABEL="CentOS 7 x86_64" TYPE="iso9660" [root@w7 ~]# findfs LABEL=qwecz /dev/sdc1 [root@w7 ~]# findfs UUID=88c0011a-e573-4719-9757-b6e60ccfc08f /dev/sdc1
e2label:管理ext系列文件系统的LABEL
e2label DEVICE [LABEL]
[root@w7 ~]# e2label /dev/sdc1 命令跟分区名,查看分区的卷标 qwecz [root@w7 ~]# e2label /dev/sdc1 qesd 命令跟分区名加上新卷标,修改分区的卷标 [root@w7 ~]# e2label /dev/sdc1 qesd [root@w7 ~]#
5.超级块
超级块: 块组的个数 每个块组中块的个数 块的大小 空闲、已使用的磁盘块个数 空闲indoe、已经被使用indoe个数
tune2fs:重新设定ext系列文件系统可调整参数的值
-l:查看指定文件系统超级块信息; super block
-L 'LABEL':修改卷标 卷标一般表示为挂载点
-m #:修预留给管理员的空间百分比 可调为0
-j: 将ext2升级为ext3
-O: 文件系统属性启用或禁用, –O ^has_journal Filesystem features
-o: 调整文件系统的默认挂载选项,–o ^acl Default mount options
-U UUID: 修改UUID号
dumpe2fs:
-h:查看超级块信息(分组信息),分区用分组管理
6.文件系统检测和修复
常发生于死机或者非正常关机之后
挂载为文件系统标记为“ dirty”
fsck: File System Check
作用:用于实现文件系统检测的工具 修复的工作特性就是把不连续的文件删除
注意:在非挂载的情况下修复
因进程以外终止或系统崩溃等原有导致写入操作非正常终止时,可能会造成文件损坏;此时,应该检测并修复文件系统;建议,离线进行
fsck:check and repair a Linux file system
-t fstype:指明文件系统类型
fsck -t ext4 = fsck.ext4
-a:无需交互而自动档修复所有错误;
-r: 交互式修复;
注意: FS_TYPE一定要与分区上已经文件类型相同;
e2fsck: ext系列文件专用的检测修复工具
e2fsck:check a Linux ext2/ext3/ext4 file system
e2fsck[option]device
-y:自动回答为yes
-f:强制修复
挂载设备
根文件系统之外的其他文件系统要想能够被访问,都必须通过“关联”至根文件系统上的某个目录来实现,此关联操作即为“挂载”;此目录即为“挂载点”;
挂载:将额外文件系统与根文件系统某现存的目录建立起关联关系,进而使得此目录做为其它文件访问入口的行为
卸载:为解除此关联关系的过程
把设备关联挂载点: mount Point
mount
卸载时:可使用设备,也可以使用挂载点
umount
挂载点下原有文件在挂载完成后会被临时隐藏
应该使用未被或不会被其他进程使用的目录挂载
1.挂载命令
挂载方法: mount DEVICE MOUNT_POINT
mount:通过查看/etc/mtab文件显示当前已挂载的所有设备
mount [-fnrsvw] [-t vfstype] [-o options] device dir
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
命令选项:
-t vsftype:指定要挂载的设备上的文件系统类型,多数情况下可省略,此时mount会通过blkid来判断要挂载的设备的文件系统类型
-r: readonly,只读挂载
-w: read and write, 读写挂载
-n: 默认情况下,设备挂载或卸载的操作会同步更新至/etc/mtab文件中,-n选项不更新/etc/mtab,相当于#mount
-a:自动挂载所有支持自动挂载的设备(定义在了/etc/fstab文件中,且挂载选项中有auto功能)
-L 'LABEL': 以卷标指定挂载设备
-U 'UUID': 以UUID指定要挂载的设备
-B, –bind: 绑定目录到另一个目录上
-o options: (挂载文件系统的选项),多个选项使用逗号分隔
async:异步模式
sync:同步模式,内存更改时,同时写磁盘
atime/noatime:包含目录和文件
diratime/nodiratime:目录的访问时间戳
auto/noauto:是否支持自动挂载,是否支持-a选项
exec/noexec:是否支持将文件系统上运行应用程序
dev/nodev:是否支持在此文件系统上使用设备文件
suid/nosuid:不否支持suid和sgid权限
remount:重新挂载
ro:只读
rw: 读写
user/nouser:是否允许普通用户挂载此设备,默认管理员才能挂载
acl:启用此文件系统上的acl功能Defaults:相当于rw, nosuid, dev, exec, auto, nouser, async
默认挂载的默认选项
mount /dev/sr0 /mnt
查看内核追踪到的已挂载的所有设备:
cat /proc/mounts
一个使用技巧:
可以实现将目录绑定在另一个目录上,作为其临时访问入口;
mount --bind 源目录 目标目录
挂载本地的回环设备;
mount -o loop /path/to/some_loop_file mount_point
2.卸载命令
查看挂载情况:
findmnt MOUNT_POINT
mount
cat /etcmatb
cat /proc/mounts
查看正在访问指定文件系统的进程:
lsof MOUNT_POINT
fuser -v MOUNT_POINT
终止所有在正访问指定的文件系统的进程:
fuser -km MOUNT_POINT
卸载:
umount DEVICE
umount MOUNT_POINT
3.文件挂载配置文件:/etc/fstab
配置文件系统体系
被mount、 fsck和其它程序使用
系统重启时保留文件系统体系
可以在设备栏使用文件系统卷标
使用mount -a 命令挂载/etc/fstab中的所有文件系统
设定除了根文件系统以外的其他文件系统能够开机时自动挂载:/etc/fstab文件
/etc/fstab 每行定义一个要挂载的文件系统;
要挂载的设备或伪文件系统
挂载点
文件系统类型
挂载选项
转储频率
自检次序
要挂载的设备或伪文件系统: 设备文件 LABEL(LABEL="") UUID(UUID="") 伪文件系统名称(proc,sysfs) 挂载点: swap类型的设备的挂载点为swap 其他的设备挂载点自定义指向某个路径 文件系统: 使用blkid命令查看挂载分区的文件系统类型 挂载选项: defaults:使用默认的挂载选项 如果要同时指明多个挂载选项,彼此间以逗号分隔 转储频率: 0:不做备份 1:每天转储 2:每隔一天转储 自检次序: 0:不自检 1:首先自检;一般只有根文件系统才用1 2:次级自检
交换分区
linux上的交换分区必须使用独立的文件系统
且文件系统的system id 必须为82
交换分区是系统RAM的补充
1.基本设置包括:
• 创建交换分区或者文件
• 使用mkswap写入特殊签名
• 在/etc/fstab文件中添加适当的条目
• 使用swapon -a 激活交换空间
2.创建swap设备
mkswap命令:
mkswap [option] device -L label:指明卷标 -f:强制
3.挂载交换空间
启用: swapon
swapon [OPTION]… [DEVICE]
-a:激活所有的交换分区;
-p PRIORITY:指定优先级
/etc/fstab:pri=value
禁用: swapoff [OPTION]… [DEVICE]
4.swap的优先级
用户可以给某个swap指定一个0到32767的优先级 如果用户没有指定,那么核心会自动给swap指定一个优先级,这个优先级从-1开始,每加入一个新的没有用户 指定优先级的swap,会给这个优先级减一。先添加的swap的缺省优先级比较高,除非用户自己指定 一个优先级,而用户指定的优先级(是正数)永远高于核心缺省指定的优先级(是负数)。 优化性能:分布存放,高性能磁盘存放
移动介质的挂载
挂载意味着使外来的文件系统看起来如同是主目录树的一部分
访问前、介质必须被挂载
摘除时,介质必须被卸载
按照默认设置,非根用户只能挂载某些设备(光盘、 DVD、软盘、 USB等等)
挂载点通常在/media 或/mnt下
1.使用光盘介质
在图形环境下自动启动挂载
/run/media/<user>/<label>
否则就必须被手工挂载
mount -r /dev/cdrom /mnt/ mount /dev/sr0 /mnt/
卸载光盘:
umount /mnt eject命令也可卸载或弹出磁盘
创建ISO文件
cp /dev/cdrom /root/centos7.iso mkisofs -r -o /root/etc.iso /etc
刻录光盘
wodim –v –eject centos.iso
2.挂载USB介质
被内核探测为SCSI设备
/dev/sdaX、 /dev/sdbX、或类似的设备文件
在图形环境中自动挂载
图标在[计算机]窗口中创建
挂载在/run/media//
手动挂载
mount /dev/sdb1 /mnt
手动卸载
umount /mnt
常见工具
1.随机创建UUID号
[root@w7 mnt]# uuidgen 212506ac-f127-4ea8-b466-c2a61f17a229
2.查看磁盘命令
lsblk 查看磁盘命令
[root@w7 ~]# lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT fd0 2:0 1 4K 0 disk sda 8:0 0 80G 0 disk ├─sda1 8:1 0 200M 0 part /boot ├─sda2 8:2 0 58.6G 0 part / └─sda3 8:3 0 2G 0 part [SWAP] sr0 11:0 1 7.2G 0 rom
3.hexdump 查看二进制文件
在磁盘可查看设备文件的MBR [root@w7 mnt]# hexdump -C -n 512 /dev/sdc 00000000 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| * 000001c0 01 00 ee fe ff ff 01 00 00 00 ff ff 7f 02 00 00 |................| 000001d0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| * 000001f0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 55 aa |..............U.| 00000200
4.查看系统加载的模块信息
lsmod命令: [root@w7 mnt]# lsmod Module Size Used by ext4 578819 0 mbcache 14958 1 ext4 jbd2 102940 1 ext4 nls_utf8 12557 0 isofs 39844 0 dm_mirror 22135 0 dm_region_hash 20862 1 dm_mirror
5. 内存空间使用状态:
free [OPTION]
-m: 以MB为单位
-g: 以GB为单位
6.文件系统空间占用等信息的查看工具:
df [OPTION]… [FILE]…
-H 以1000为单位
-T 文件系统类型
-h: human-readable
-i: inodes instead of blocks
-P: 以Posix兼容的格式输出
7.查看某目录总体空间占用状态:
du [OPTION]… DIR
-h: human-readable
-s: summary
8.工具dd
dd命令: convert and copy a file
用法:
dd if=/PATH/FROM/SRC of=/PATH/TO/DEST
bs=#: block size, 复制单元大小
count=#:复制多少个bs
后跟选项:
of=file 写到所命名的文件而不是到标准输出
if=file 从所命名文件读取而不是从标准输入
bs=size 指定块大小(既是是ibs也是obs)
ibs=size 一次读size个byte
obs=size 一次写size个byte
cbs=size 一次转化size个byte
skip=blocks 从开头忽略blocks个ibs大小的块
seek=blocks 从开头忽略blocks个obs大小的块
count=n 只拷贝n个记录
conv=conversion[,conversion…] 用指定的参数转换文件。
转换参数:
ascii 转换 EBCDIC 为 ASCII
ebcdic 转换 ASCII 为 EBCDIC
block 转换为长度为 cbs 的记录,不足部分用空格填充。
nblock 替代cbs长度的每一行尾的空格为新行
lcase 把大写字符转换为小写字符
ucase 把小写字符转换为大写字符
swab 交换输入的每对字节
noerror 出错时不停止
notrunc 不截短输出文件
sync 把每个输入块填充到ibs个字节,不足部分用空(NUL)字符补齐
用法:
磁盘拷贝:
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备份:
将本地的/dev/sdx整盘备份到/dev/sdy
dd if=/dev/sdx of=/dev/sdy
将/dev/sdx全盘数据备份到指定路径的image文件
dd if=/dev/sdx of=/path/to/image
备份/dev/sdx全盘数据,并利用gzip工具进行压缩,保存到指定路径
dd if=/dev/sdx | gzip >/path/to/image.gz恢复:
将备份文件恢复到指定盘
dd if=/path/to/image of=/dev/sdx
将压缩的备份文件恢复到指定盘
gzip -dc /path/to/image.gz | dd of=/dev/sdx拷贝内存资料到硬盘
将内存里的数据拷贝到root目录下的mem.bin文件
dd if=/dev/mem of=/root/mem.bin bs=1024从光盘拷贝iso镜像
拷贝光盘数据到root文件夹下,并保存为cd.iso文件
dd if=/dev/cdrom of=/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=12500 of=/root/1Gb.file
通过比较dd指令输出中所显示的命令执行时间,即可确定系统 最佳的block size大小测试硬盘读写速度
dd if=/root/1Gb.file bs=64k | dd of=/dev/null
dd if=/dev/zero of=/root/1Gb.file bs=1024 count=1000000
通过上两个命令输出的执行时间,可以计算出测试硬盘的读/写 速度修复硬盘
dd if=/dev/sda of=/dev/sda
当硬盘较长时间(比如1, 2年)放置不使用后,磁盘上会产生消磁点。当磁头读到这些区域时会遇到困难,并可能导致I/O错误。当这种情况影响到硬盘的第一个扇区时 ,可能导致硬盘报废。上边的命令有可能使这些数据起死回生。且这个过程是安全,高效的。有一个大与2K的二进制文件fileA。 现在想从第64个字节位置开始读取,需要读取的大小是128Byts。又有fileB, 想把上面读取到的128Bytes写到第32个字节开始的位置,替换128Bytes,请问如何实现?
dd if=fileA of=fileB bs=1 count=128 skip=63 seek=31 conv=notrunc
实战:
1、创建一个2G的文件系统,块大小为2048byte, 预留1%用空间,文件系统ext4,卷标为TEST,要求此分区开机后自动挂载至/testdir目录,且默认有acl挂载选项
2、写一个脚本,完成如下功能:
(1) 列出当前系统识别到的所有磁盘设备
(2) 如磁盘数量为1,则显示其空间使用信息
否则,则显示最后一个磁盘上的空间使用信
原创文章,作者:wencx,如若转载,请注明出处:http://www.178linux.com/40376