13-磁盘管理-新建分区创建文件系统&增大交换分区&测试磁盘性能&备份还原分区表

磁盘介绍

硬盘种类

机械硬盘(HDD):Hard Disk Drive,即是传统普通硬盘,主要由:盘片,磁头,盘片转轴及控制电机,磁头控制器,数据转换器,接口,缓存等几个部分组成。机械硬盘中所有的盘片都装在一个旋转轴上,每张盘片之间是平行的,在每个盘片的存储面上有一个磁头,磁头与盘片之间的距离比头发丝的直径还小,所有的磁头联在一个磁头控制器上,由磁头控制器负责各个磁头的运动。磁头可沿盘片的半径方向运动,加上盘片每分钟几千转的高速旋转,磁头就可以定位在盘片的指定位置上进行数据的读写操作。数据通过磁头由电磁流来改变极性方式被电磁流写到磁盘上,也可以通过相反方式读取。硬盘为精密设备,进入硬盘的空气必须过滤
固态硬盘(SSD):Solid State Drive,用固态电子存储芯片阵列而制成的硬盘,由控制单元和存储单元(FLASH芯片、DRAM芯片)组成。固态硬盘在接口的规范和定义、功能及使用方法上与普通硬盘的完全相同,在产品外形和尺寸上也与普通硬盘一致
相较于HDD,SSD在防震抗摔、传输速率、功耗、重量、噪音上有明显优势,SSD传输速率性能是HDD的2倍
相较于SSD,HDD在价格、容量、使用寿命上占有绝对优势
硬盘有价,数据无价,目前SSD不能完全取代HHD

硬盘接口类型

并行:
串口:

磁盘设备的设备文件命名

SCSI, SATA, SAS, IDE,USB:-------/dev/sd
虚拟磁盘:/dev/vd------------虚拟机里面的磁盘显示方式
不同磁盘标识:a-z,aa,ab-------/dev/sda, /dev/sdb, ...
同一设备上的不同分区:1,2, .---/dev/sda1, /dev/sda5

最新的磁盘命名,不管什么类型磁盘,都是sd开头,目前已保持统一了

硬盘存储术语

head:磁头
track:磁道
cylinder:柱面
sector: 扇区,512bytes

每个扇区512字节,0.5KB
扇区6位编码 64个扇区 0-63 0扇区不存储数据
磁道10位编码 1024个磁道 从外圈往内圈数 0-1024

磁头数等于盘面数 8个位 256个磁头
512631024256=====最大8G的容量
512
63*256=====一个柱面8M的容量
这个是过去的磁盘扇区结构,存储方式 磁盘容量低
6+10+8 =24位寻址

centos分区是以柱面分的 现在不是按柱面分了,现在精确到扇区分

磁盘寻址方式

CHS
采用24bit位寻址
其中前10位表示cylinder,中间8位表示head,后面6位表示 sector。
最大寻址空间8GB

LBA(logical block addressing)
 LBA是一个整数,通过转换成CHS格式完成磁盘具体寻址
 LBA采用48个bit位寻址
最大寻址空间128PB

由于CHS寻址方式的寻址空间在大概8GB以内,所以在磁盘容量小于大概8GB时,可以使用CHS寻址方式或是LBA寻址方式;在磁盘容量大于大概8GB时,则只能使用LBA寻址方式

磁盘分区方式以及分区结构

MBR分区

MBR:Master Boot Record,1982年,
使用32位表示扇区数,分区不超过2T 2的32次方个扇区
如何分区:按柱面 2的10次方个柱面
0磁道0扇区:512bytes
446bytes: boot loader
64bytes:分区表
16bytes: 标识一个分区
2bytes: 55AA
4个主分区;3主分区+1扩展(N个逻辑分区)

MBR分区结构

硬盘主引导记录MBR由4个部分组成
主引导程序(偏移地址0000H--0088H),它负责从活动分区中装载,并运行系统引导程序。
出错信息数据区,偏移地址0089H--00E1H为出错信息,00E2H--01BDH全为0字节。
分区表(DPT,DiskPartitionTable)含4个分区项,偏移地址01BEH--01FDH,每个分区表项长16个字节,共64字节为分区项1、分区项2、分区项3、分区项4
结束标志字,偏移地址01FE--01FF的2个字节值为结束标志55AA

GPT分区

GPT:GUID(GlobalsUniqueIdentifiers)partitiontable支持128个分区,使用64位(2的64次方个扇区),支持8Z(512Byte/block )64Z ( 4096Byte/block)
使用128位UUID(UniversallyUniqueIdentifier)表示磁盘和分区GPT分区表自动备份在头和尾两份,并有CRC校验位
UEFI (统一扩展固件接口)硬件支持GPT,使操作系统启动
GPT分区结构
EFI部分又可以分为4个区域:EFI信息区(GPT头)、分区表、GPT分区、备份区域

磁盘分区工具

查看分区的几种方式

(1、查看的是内存中的
ls /dev/sd*
cat /proc/partitions
lsblk
(2、查看的磁盘中的
fdisk -l

管理分区

创建分区工具

(1、fdisk 创建MBR分区
(2、gdisk 创建GPT分区
(3、parted 高级分区操作

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

把gpt分区去掉,转换成mbr,谨记数据是全部消失的
parted -s /dev/sda mklabel msdos

6MBR默认以柱面分的,如果以扇区区分可以:fdisk /dev/sda -cu
7MBR默认以扇区分的,如果以柱面区分可以:fdisk -u=cylinder /dev/sda

fdisk和gdisk

分区工具fdisk和gdisk
gdisk /dev/sdb 类fdisk 的GPT分区工具
fdisk -l [-u] [device...] 查看分区
fdisk /dev/sdb 管理分区
子命令:
p 分区列表
t 更改分区类型
n 创建新分区
d 删除分区
v 校验分区 u 转换单位
w 保存并退出
q 不保存并退出

同步分区表

查看内核是否已经识别新的分区:
cat /proc/partations
centos6通知内核重新读取硬盘分区表 新增分区用
partx -a /dev/sdb
kpartx -a /dev/sdb -f: force
删除分区用(临时删除,没有真正删除)
partx -d --nr M-N /dev/sdb 
例如:partx -d --nr 6-7 /dev/sda (对于正在使用的设备,删除分区,同步内存分区表)
CentOS 5,7: 使用partprobe
partprobe [/dev/DEVICE]
partprobe-重新设置内存中的内核分区表版本 (把设备分区表加载内存)在6上不好用,其它版本系统可以

文件系统

什么是文件系统

(1、文件系统是操作系统用于明确存储设备或分区上的文件的方法和数据结构;即在存储设备上组织文件的方法。操作系统中负责管理和存储文件信息的软件结构称为文件管理系统,简称文件系统
(2、从系统角度来看,文件系统是对文件存储设备的空间进行组织和分配,负责文件存储并对存入的文件进行保护和检索的系统。具体地说,它负责为用户建立文件,存入、读出、修改、转储文件,控制文件的存取,安全控制,日志,压缩,加密等
(3、支持的文件系统:/lib/modules/uname –r/kernel/fs

文件系统类型及分类

文件系统类型

Linux文件系统:ext2(Extended file system), ext3, ext4, xfs(SGI), btrfs(Oracle), reiserfs, jfs( AIX), swap
光盘:iso9660
Windows:FAT32, exFAT,NTFS
Unix: FFS(fast), UFS(unix), JFS2
网络文件系统:NFS, CIFS
集群文件系统:GFS2, OCFS2(oracle)
分布式文件系统: fastdfs,ceph, moosefs, mogilefs, glusterfs, Lustre
RAW:未经处理或者未经格式化产生的文件系统

文件系统分类

根据其是否支持"journal"功能:
日志型文件系统: ext3, ext4, xfs, ...
非日志型文件系统: ext2, vfat
文件系统的组成部分:
内核中的模块:ext4, xfs, vfat
用户空间的管理工具:mkfs.ext4, mkfs.xfs,mkfs.vfat
Linux的虚拟文件系统:VFS
查前支持的文件系统:cat /proc/filesystems

创建文件系统

mkfs命令:
(1) mkfs.FS_TYPE /dev/DEVICE
ext4
xfs
btrfs
vfat
[root@centos6 ~]#mkfs.ext4 /dev/sdb
(2) mkfs -t FS_TYPE /dev/DEVICE
-L 'LABEL': 设定卷标
[root@centos6 ~]#mkfs -t ext4 /dev/sdb
[root@centos6 ~]#mkfs -L '/mnt' /dev/sdb

创建ext文件系统
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:关闭指定特性

管理文件系统

blkid

块设备属性信息查看
blkid [OPTION]... [DEVICE]
-U UUID: 根据指定的UUID来查找对应的设备
-L LABEL:根据指定的LABEL来查找对应的设备

findfs

查找分区
findfs [options] LABEL=<label>
findfs [options] UUID=<uuid>

知道挂载点查出设备名称
blkid -U `sed -rn 's@^UUID=(.) /app .@\1@p' /etc/fstab`
findfs UUID=`sed -nr 's@^UUID=(.) /app .@\1@p' /etc/fstab`
e2label
管理ext系列文件系统的LABEL
e2label DEVICE [LABEL] 

tune2fs

tune2fs:重新设定ext系列文件系统可调整参数的值
-l:查看指定文件系统超级块信息;super block
-L 'LABEL':修改卷标
-m #:修预留给管理员的空间百分比
-j: 将ext2升级为ext3
-O: 文件系统属性启用或禁用, –O ^has_journal
-o: 调整文件系统的默认挂载选项,–o ^acl
-U UUID: 修改UUID号

[root@centos6 ~]#tune2fs -l /dev/sdb
centos6安装系统后,新加硬盘默认没有acl功能
添加acl功能:tune2fs -o acl /dev/sdb1
去除acl功能:tune2fs -o ^acl /dev/sdb1

dumpe2fs

块分组管理,32768块
-h:查看超级块信息,不显示分组信息
dumpe2fs 设备名称 查看设备元数据和块分组信息
dumpe2fs -h /dev/sdb = tune2fs -l /dev/sdb

超级块和inode table
节点元数据存放着超级快里在group0里面
查看超级块的原数据备份
dumpe2fs /dev/sdb | grep -i backup

文件系统检测和修复

常发生于死机或者非正常关机之后
挂载为文件系统标记为“no clean”
注意:一定不要在挂载状态下修复

fsck

fsck: File System Check
fsck.FS_TYPE
fsck -t FS_TYPE
-p: 自动修复错误
-r: 交互式修复错误
FS_TYPE一定要与分区上已经文件类型相同

e2fsck

e2fsck:ext系列文件专用的检测修复工具
-y:自动回答为yes
-f:强制修复

交换分区相关命令

交换分区是系统RAM的补充
基本设置包括:
创建交换分区或者文件
使用mkswap写入特殊签名
在/etc/fstab文件中添加适当的条目
使用swapon -a 激活交换空间

挂载交换分区
启用:swapon
禁用:swapoff [OPTION]... [DEVICE]

swapon [OPTION]... [DEVICE]
-a:激活所有的交换分区;
-p PRIORITY:指定优先级
-s 查看swap都是哪些设备
/etc/fstab:pri=value

修改swap设备优先级
在/etc/fstab挂载的行的,挂载选项加pri=值 值越大优先级越高

SWAP的优先级
(1、可以指定swap分区0到32767的优先级,值越大优先级越高
(2、如果用户没有指定,那么核心会自动给swap指定一个优先级,这个优先级从-1开始,每加入一个新的没有用户指定优先级的swap,会给这个优先级减一
(3、先添加的swap的缺省优先级比较高,除非用户自己指定一个优先级,而用户指定的优先级(是正数)永远高于核心缺省指定的优先级(是负数)
(4、优化性能:分布存放,高性能磁盘存放

挂载文件系统

临时挂载

挂载方法:mount DEVICE MOUNT_POINT
mount:通过查看/etc/mtab文件显示当前已挂载的所有设备
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
dir:挂载点
事先存在;建议使用空目录
进程正在使用中的设备无法被卸载

mount常用命令选项
-t vsftype:指定要挂载的设备上的文件系统类型 一般系统默认会自动指定正确的类型,最好不写的好
-r: readonly,只读挂载
-w: read and write, 读写挂载
-n: 不更新/etc/mtab,mount不可见
-a:自动挂载所有支持自动挂载的设备(定义在了/etc/fstab 文件中,且挂载选项中有auto功能) 
-L'LABEL': 以卷标指定挂载设备
-U 'UUID': 以UUID指定要挂载的设备
-B, --bind: 绑定目录到另一个目录上

查看内核追踪到的已挂载的所有设备
cat /proc/mounts
mount常用命令选项
 -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设备 6上有8个loop设备文件 7上显示两个,但不限制个数
defaults:相当于rw, suid, dev, exec, auto, nouser, async
缓冲区buffer:写数据,临时存放写到磁盘的空间
缓存cache:常使用的数据存放缓存,方便随时调取
centos6安装系统后,手工分区ext文件系统无acl功能
强制把缓存区数据同步到设备
sync
设置指定loop设备关联到指定文件
losetup /dev/loop8 /app/partfile2 重启会丢失
查看关联的映射关系
losetup -a
在grub文件内核行,最后面添加如下行,可以指定生成多少个loop设备
max_loop=100

查看挂载情况
findmnt MOUNT_POINT|device
查看正在访问指定文件系统的进程
lsof MOUNT_POINT
fuser -v MOUNT_POINT
终止所有在正访问指定的文件系统的进程
fuser -km MOUNT_POINT

永久挂载

/etc/fstab每行定义一个要挂载的文件系统

要挂载的设备或伪文件系统
设备文件
LABEL:LABEL=""
UUID:UUID=""
伪文件系统名称:proc, sysfs
挂载点
文件系统类型
挂载选项:defaults
转储频率:0:不做备份 1:每天转储 2:每隔一天转储
自检次序: 0:不自检 1:首先自检;一般只有rootfs才用1

使用mount -a 命令挂载/etc/fstab中的所有文件系统,如果已挂载的,然后修改再挂,是不生效的
需要卸载在重挂,才会生效

目录挂目录 类型写:none 挂载选项写:bind
文件挂目录,挂载选项加写:loop

生成一个随机的uuid号
uuidgen
修改设备UUID
tune2fs -U uuid 设备名称=tune2fs UUID=uuid 设备名称

光盘、USB挂载相关

在图形环境下自动启动挂载/run/media/<user>/<label>
否则就必须被手工挂载
mount /dev/cdrom /mnt/
eject命令卸载或弹出磁盘
eject 弹出
eject -t 弹入(拉进去)
创建ISO文件
cp /dev/cdrom /root/centos7.iso
mkisofs -r -o /root/etc.iso /etc
刻录光盘
wodim -v -eject centos.ios
查看USB设备是否识别
lsusb

常见工具

free

内存空间使用状态:
free [OPTION]
-m: 以MB为单位
-g: 以GB为单位
-h:人类易识别的

df

文件系统空间占用等信息的查看工具:
df [OPTION]... [FILE]...
-H 以1000为单位
-T 文件系统类型
-h: human-readable
-i:inodes instead of blocks
-P: 以Posix兼容的格式输出

du

查看某目录总体空间占用状态:
du [OPTION]... DIR
-h: human-readable
-s: summary
--max-depth=N :看目录时,目录深度

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
lcase 把大写字符转换为小写字符
ucase 把小写字符转换为大写字符
nocreat 不创建输出文件
noerror 出错时不停止
notrunc 不截短输出文件
sync 把每个输入块填充到ibs个字节,不足部分用空(NUL)字符补齐

备份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

备份:

将本地的/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

销毁磁盘数据

利用随机的数据填充硬盘,在某些必要的场合可以用来销毁数据,执行此操作以后,/dev/sda1将无法挂载,创建和拷贝操作无法执行
dd if=/dev/urandom of=/dev/sda1

得到最恰当的block size
通过比较dd指令输出中所显示的命令执行时间,即可确定系统最佳的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 of=/root/1Gb.file bs=1024 count=1000000

测试硬盘读速度

dd if=/root/1Gb.file bs=64k | dd of=/dev/null

修复硬盘

当硬盘较长时间(比如1,2年)放置不使用后,磁盘上会产生消磁点。当磁头读到这些区域时会遇到困难,并可能导致I/O错误。当这种情况影响到硬盘的第一个扇区时,可能导致硬盘报废。上边的命令有可能使这些数据起死回生,且这个过程是安全高效的
dd if=/dev/sda of=/dev/sda

实验1:新建分区创建文件系统

创建一个2G的文件系统,块大小为2048byte,预留1%可用空间,文件系统ext4,卷标为TEST,要求此分区开机后自动挂载至/test目录,且默认有acl挂载选项
1、新建分区


image.png

增加了几块磁盘,现在对第二块盘分区创建


image.png

image.png

image.png

如果在正在使用的磁盘分区,分区表不会立即同步,需要手动同步分区表到内存,如下操作
image.png

2、创建文件系统


image.png

注意:因为我这虚拟机做实验,之前已经有过分区和文件系统,时删除后做这个实验。过程遇到刚新建分区不用格式化就有文件系统了,很纳闷,经过查找和实验得出:在之前有过文件系统分区盘,删除后重新创建分区时,如果重建的分区起始扇区不变,只改变大小,建立的分区会继承之前删除同样起始扇区分区的文件系统和UUID信息,
image.png

image.png

image.png

image.png

我这是在centos6上做的,6默认安装系统后,新建分区无acl功能,需要添加


image.png

image.png

3、挂载该分区
临时挂载
image.png

重启挂载失效,需要永久挂载,写入配置文件


image.png

实验2:备份、还原、删除分区表

查看磁盘sda设备0磁道0扇区512个字节,也就是主引导记录
hexdump -C -n 512 /dev/sda
备份硬盘设备的mbr整个主引导记录
dd if=/dev/sda of=/app/mbr bs=1 count=512
查看备份的引导记录(都是十六进制查看)
hexdump -C /app/mbr

查看设备分区表
fdisk -l
备份的分区表还原到其它硬盘设备
dd if=/app/mbr of=/dev/sda bs=1 count=66 skip=446 seek=446
64+2-------2表示分区结束标志55 aa

删除硬盘设备分区表
dd if=/dev/zero of=/dev/sda bs=1 count=64 skip=446 seek=446
备份硬盘设备分区表
dd if=/dev/sda of=/app/mbr bs=1 count=64 skip =46 seek=446
还原硬盘设备分区表
dd if=/app/mbr of=/dev/sda bs=1 count=64 skip=446 seek=446

实验3:新建swap分区

image.png

1 创建分区
在sdb创建交换分区


image.png

image.png

image.png

同步分区表到内核中


image.png

image.png

2 文件系统
mkswap /dev/sdb2 -L SWAP


image.png

3 配置文件
vim /etc/fstab
UUID=713b3af7-5473-4e56-8e2d-717dd31c1d31 swap swap pri=10 0 0


image.png

4 生效
swapon -a
swapon -s 查看

image.png

5 删除 swap
1)swapoff /dev/sdd1
2)vim /etc/fstab
删除对应行
3)fdisk /dev/sdd 删除分区

写一个脚本,完成如下功能

(1) 列出当前系统识别到的所有磁盘设备
(2)如磁盘数量为1,则显示其空间使用信息,否则,则显示最后一个磁盘上的空间使用信息

disks=`lsblk |grep "^sd[[:alpha:]][^[:digit:]].*"|cut -d" " -f1`
echo -e "该系统磁盘设备分别是:\n$disks"
num=`echo $disks |tr -s " " '\n' |wc -l`
echo "The system device num is $num"
end=`echo $disks |tr -s " " '\n' |sort |tail -1`
echo "最后一个设备是:$end"
[[ "$num" -eq 1 ]] && df -h | grep "$disks" |tr -s " " : | cut -d: -f1,3 || echo "最后一个磁盘设备分区已使用空间情况为:`df -h | grep "$end" |tr -s " " : | cut -d: -f1,3 ` "


image.png
image.png

推荐阅读更多精彩内容