磁盘管理
设备类型:
1、块设备:block,以“块”为最小存取单位,有存储功能,作为存储的介质,例如: 磁盘,光盘,软盘,磁带机
2、字符设备:char,以“字符”为最小存取单位,没有存储功能,只能进行信息的输 入和输出,例如:终端,键盘
设备文件:
1.关联至一个设备驱动程序,进而能够跟与之对应的硬件设备进行通信
2.操作系统默认把设备文件放置在“/dev/”下
设备号码:
1.主设备号:major number, 标识设备类型
2.次设备号:minor number, 标识同一类型下的不同设备
8,1
8,2
……
3.设备文件是根据设备类型和设备号码(主设备号和此设备号)而创建的
4设备文件的创建:
mknod PATH DEVTYPE MAJORNUM MINORNUM
fidsk-l PATH:查看硬盘信息
df-a:可以查看自己创建的设备文件的挂载等信息
硬盘接口类型
1.并行:
IDE:133MB/s
SCSI:640MB/s
2.串口:
SATA:6Gbps
SAS:6Gbps
USB:480MB/s
3.rpm:rotations,硬盘每分钟的转速,一般常见的为:5400转/分钟;7200转/分钟;15000转/分钟
机械硬盘和固态硬盘
1、机械硬盘(HDD):Hard Disk Drive,即是传统普通硬盘,主要由:盘片,磁头,盘片转轴及控制电机,
1)磁头控制器,数据转换器,接口,缓存等几个部分组成。
2)机械硬盘中所有的盘片都装在一个旋转轴上,每张盘片之间是平行的,在每个盘片的存储面上有一个磁头,
3)磁头与盘片之间的距离比头发丝的直径还小,所有的磁头联在一个磁头控制器上,由磁头控制器负责各个磁头的运动。
4)磁头可沿盘片的半径方向运动,加上盘片每分钟几千转的高速旋转,磁头就可以定位在盘片的指定位置上进行数据的读写操作。
5)数据通过磁头由电磁流来改变极性方式被电磁流写到磁盘上,也可以通过相反方式读取。硬盘为精密设备,进入硬盘的空气必须过滤
2、固态硬盘(SSD):Solid State Drive,用固态电子存储芯片阵列而制成的硬盘,由控制单元和存储单元(FLASH芯片、DRAM芯片)组成。
1)固态硬盘在接口的规范和定义、功能及使用方法上与普通硬盘的完全相同,
2)在产品外形和尺寸上也与普通硬盘一致
3)相较于HDD,SSD在防震抗摔、传输速率、功耗、重量、噪音上有明显优势,
4)SSD传输速率性能是HDD的2倍
5)相较于SSD,HDD在价格、容量、使用寿命上占有绝对优势
6)硬盘有价,数据无价,目前SSD不能完全取代HHD
磁盘设备的设备文件
1.命名:/dev/DEV_FILE
SCSI,SATA, SAS, IDE,USB: /dev/sd
2.虚拟磁盘:/dev/vd
3.不同磁盘标识:a-z,aa,ab…
1)dev/sda,/dev/sdb, ...
2)同一设备上的不同分区:1,2, ...
/dev/sda1,/dev/sda5
硬盘存储术语
head:磁头
secotr:扇区,每个扇区512bytes
track:磁道,一个盘面中所有半径相同的扇区组成的圆环,最外圈的第一个扇区叫做0扇区0磁道
cylinder:柱面,所有盘面的相同磁道组成的圆柱体,所以硬盘有0柱面,1柱面。。。
磁盘的读写顺序是:0柱面-->1柱面-->2柱面。。。
磁盘的三围:
柱面,磁头,扇区(SHR):可以定位一个扇区所在的位置
磁盘扇区和文件系统的块
1、操作系统与磁盘之间交流的最小单位就是磁盘块,它是文件系统虚拟出来的一个概念,对于操作系统来说是读写的最小单位。
2、磁盘进行读写的最小单位是扇区,一般为512字节,扇区是真实存在的,是硬件部分,是一块真实存在的物理区域。
3、由于我们经常接触的是软件部分,而不是硬件部分,所以提的多的是磁盘块。而不是扇区。
4、磁盘块的大小:块=扇区×2^n。因为磁盘进行读写的基本单位是扇区,而操作系统与磁盘之间是利用块进行交流的,所以操作系统想进行读写,最方便的方式就是设置块为扇区的整数倍,一般为4k大小
磁盘的寻址
寻址:物理上,磁盘用来定位数据在磁盘上的物理位置的方式
寻址方式
1.CHS
1)采用24bit位寻址,即用24bit来标识一个磁盘中的所有扇区,
2)其中前10位表示cylinder,中间8位表示head,后面6位表示sector。
3)最大寻址空间8GB,2^24*512/(1024^3)=8
2.LBA
1)LBA是一个整数,通过计算转换的方法转换成CHS格式完成磁盘具体寻址
2)LBA采用48个bit位寻址
3)最大寻址空间128PB
例:LBA12,表示使用LBA寻址方式定位到的扇区;可能是一个扇区也可能是几个扇区
关键点:
1.由于CHS寻址方式的寻址空间在大概8GB以内,所以在磁盘容量小于大概8GB时,可使用CHS寻址方式或是LBA寻址方式;在磁盘容量大于大概8GB时,则只能使用LBA寻址方式
2.一般的大于8G的磁盘,在前8G仍然使用CHS寻址方式寻址,从8G以后此采用LBA寻址方式寻址
磁盘分区
1.为什么分区
1)优化I/O性能
2)实现磁盘空间配额限制
例:规定用户在这个磁盘下只能创建多少空间的文件
3)提高修复速度
例: 文件以块的方式存储在文件系统中,如果存储文件的块很分散(例如日志文件),就会影响文件的读取速率,如果将日 志文件和核心的数据文件放置在一起,产生磁盘碎片的几率就会很大,导致核心数据文件的读取速率十分低下,所以最好在 磁盘中划分出单独的一块区域存储日志文件,即日志文件只存储在这个分区中
4)隔离系统和程序
5)安装多个OS
例:在磁盘的不同分区中安装不同的操作系统
6)采用不同文件系统
例:在磁盘的不同分区中使用不同的文件系统
2.分区方式:
MBR分区
1.MBR分区:MBR:Master Boot Record,1982年,使用32位表示扇区数,分区不超过2T
2.4个主分区:3主分区+1扩展(N个逻辑分区)
3.如何分区:按柱面
4.MBR:存在于磁盘的0磁道0扇区,存储着硬盘主引导记录和磁盘的主分区信息,大小为512bytes,一般用十六进制数表示
5.MBR的内容:
1)主引导程序(偏移地址0000--0088),它负责从活动分区中装载,并运行系统引导程序,bootloader:系统启动的引导信息,446字节,在linux下叫做grub
2)出错信息数据区,偏移地址0089--00E1为出错信息,00E2--01BD全为0字节
3)分区表(DPT,Disk Partition Table)含4个分区项,偏移地址01BE--01FD,分区表:64bytes,每16个字节表示一个分区,一共四个分区
4)结束标志字,偏移地址01FE--01FF2个字节值为结束标志, 为55AA,2字节
6.以十六进制的方式查看MBR:hexdump -C -n 512 /dev/sda -v
7.使用32位的二进制数来表示磁盘上一个分区的总扇区数,磁盘的每个分区的最大空间为2T
8.分区结构
GTP分区
1、GPT:GUID partition table 支持128个分区,使用64位,
2、每个分区最大支持8Z( 512Byte/block ),64Z( 4096Byte/block)
3、使用128位UUID表示磁盘和分区
生成UUID号:uuidgen
4、GPT分区表自动备份在头和尾两份,并有CRC校验位
5、使用UEFI主板(统一扩展固件接口)硬件支持GPT,使操作系统启动
6、分区结构(图)
主板
1、BIOS(基本输入输出系统),只能引导MBR格式分区的磁盘,不能引导GPT格式分区的磁盘
2、UEFI(统一扩展固件接口),支持引导GTP格式分区的磁盘
管理分区
1.查看当前内存中加载的分区表信息,不一定与硬盘中的分区表信息实时同步
lsblk:该命令默认情况下以树形格式打印所有块设备(RAM磁盘除外)
cat/proc/partitions
ls/dev/sdN*:N表示设备名


2.创建分区
1)fdisk:创建MBR分区,在Centos7中也支持GPT分区
2)gdisk创建GPT分区
3)parted高级分区操作(创建、复制、调整大小等等)
4)partprobe重新设置内存中的内核分区表版本
fdisk:
parted:parted的操作都是实时生效的,小心使用
交互式创建分区:

非交互式创建分区:

gdisk
类似于fdisk

使用gdisk进行非交互式分区,一般适用于脚本中:
方法一:

方法二:

3.同步分区表
通知内核重新读取磁盘的分区表
Centos6
更新增加的分区时使用
partx-a /dev/DEVICE
kpartx-a /dev/DEVICE -f: force
删除分区时使用
partx-d --nr M-N /dev/DEVICE
CentOS5,7
partprobe[/dev/DEVICE]
文件系统
文件系统是操作系统用于明确存储设备或分区上的文件的方法和数据结构,即在存储设备上组织文件的方法。操作系统中负责管理和存储文件信息的软件结构称为文件管理系统,简称文件系统
从系统角度来看,文件系统是对文件存储设备的空间进行组织和分配,负责文件存储并对存入的文件进行保护和检索的系统。具体地说,它负责为用户建立文件,存入、读出、 修改、转储文件,控制文件的存取,安全控制,日志,压缩,加密等
查看支持的文件系统:cd /lib/modules/`uname –r`/kernel/fs
文件系统类型
1.根据平台和用途
1)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:未经处理或者未经格式化产生的文件系统
2)windows文件系统
2.根据其是否支持"日志(journal)"功能:
1)日志型文件系统: ext3, ext4, xfs
2)非日志型文件系统: ext2, vfat
解释-->日志功能:
系统日志:/var/log:监控,用来状态的记录,进行拍错
oracle数据库中的redo log日志:
数据先在内存中进行修改,不会实时地写入硬盘,隔段时间写入一次硬盘,数据在内存中修改之后会写入redo log日志中,实时记录做过哪些操作,记录对数据库所做的修改,一旦在数据写入硬盘之前发生故障,在数据库重启之后, 会读取redo log日志,将对数据库所做的操作再做一次,进行数据的恢复
文件系统的日志:
inode中的bitmap
block中的bitmap
两种bitmap中记录着inode和block的状态,空闲为0,占用为1,每分配一个inode和block都会记录在文件系统日志中
如果在还未将内存中的inode和block的状态信息写入bitmap之前,发生了故障,例如断电,这种情况视为文件系 统的非正常卸载,则在系统重启之后,会对文件系统的状态值进行检查,检查是否是正常卸载,如果 是非正常卸载,会根据文件系统日志对已分配的inode和block进行检查,检查是否与bitmap中记录的inode和block的状态是否相同,如果 不同就会作出修复
文件系统的选择
文件系统的组成部分:
1.内核中的模块:ext4, xfs,vfat
2.用户空间的管理工具:mkfs.ext4,mkfs.xfs,mkfs.vfat
3.Linux的虚拟文件系统:VFS(?)
查看当前支持的文件系统:cat /proc/filesystems
查看当前已经挂载的设备的文件系统的类型:,mount
创建文件系统:
mkfs命令
1、mkfs.FS_TYPE /dev/DEVICE#
2、mkfs -t FS_TYPE /dev/DEVICE#
3、在ext4的文件系统设定卷标:
mkfs.FS_TYPE–L ‘LABEL’/dev/DEVICE#
mkfs-t FS_TYPE –L ‘LABEL’/dev/DEVICE#
4、FS_TYPE(文件系统类型):ext4,xfs(只有CentOS7支持),btrfs,vfat




mke2fs:ext系列文件系统专用管理工具
-t{ext2|ext3|ext4} /dev/DEVICE
创建文件系统,相当于mkfs,{ext2|ext3|ext4},或者mkfs –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:关闭指定特性
查看块设备(分区)
blkid[OPTION]... [DEVICE]
-UUUID: 根据指定的UUID来查找对应的设备
-LLABEL:根据指定的LABEL来查找对应的设备

e2label:管理ext系列文件系统的LABEL
e2labelDEVICE#:查看卷标
e2labelDEVICE# [LABEL]:设置、更改卷标

findfs:查找分区
findfs[options] LABEL=<label>:功能与blkid –L相同
findfs[options] UUID=<uuid>:功能与blkid –U相同
tune2fs:重新设定ext系列文件系统可调整参数的值
-l /dev/DEVICE#:查看指定文件系统超级块信息;super block(超级块的分组·)
-L 'LABEL' /dev/DEVICE#:修改卷标
-m # /dev/DEVICE#:修预留给管理员的空间百分比
-j /dev/DEVICE#: 将ext2升级为ext3
-O /dev/DEVICE#: 文件系统属性启用或禁用,
禁用has_journal:–O ^has_journal
开启has_joutnal:-O has_journal
-o /dev/DEVICE#: 调整文件系统的默认挂载选项
默认选项取消acl:–o ^acl
默认选项添加acl:-o acl
-U UUID /dev/DEVICE#: 修改UUID号
-h /dev/DEVICE#:查看超级块信息,不显示分组信息
dumpe2fs /dev/DEVICE#:查看指定的ext系列文件系统的超级块信息
超级块
超级块的作用是存储文件系统的大小,有多少是空的和已经填满的占多少,以及它们各自的总数和其他诸如此类等信息




文件系统的检测和修复(ext系列文件系统)
常发生于死机或者非正常关机之后
挂载为文件系统标记为“no clean”
注意:一定不要在挂载状态下修复
fsck:文件系统检测
fsck.FS_TYPE
fsck-t FS_TYPE
-p:自动修复错误
-r:交互式修复错误
FS_TYPE一定要与分区上已经创建的文件系统类型相同
e2fsck:ext系列文件专用的检测修复工具
-y:自动回答为yes
-f:强制修复
挂载
1、挂载:将额外文件系统与根文件系统某现存的目录建立起关联关系,进而使得此目录做为其它文件访问入口的行为
2、命令:mount [命令选项] [–o 挂载选项] DEVICE# PATH
DEVICE#:
1)设备文件:例如/dev/sda5
2)-L'LABEL', 例如 -L 'hello'
3)-U'UUID'
4) 伪文件系统名称:proc,sysfs, devtmpfs, configfs
PATH--->挂载点(mountPoint)
1)与额外文件系统建立关系的根文件系统某现存的目录叫做挂载点
2)挂载时只指定 DEVICE#或者PATH的情况:
3)在/etc/fstab文件中添加之后可以单独指定一个参数进行挂载
3、挂载点目录要事先存在;建议使用空目录
4、若挂载点目录非空,挂载点目录下原有文件在挂载完成后会被临时隐藏
卸载:
1、为解除此关联关系的过程
2、卸载时,可以指定可使用设备,也可以使用挂载点
3、命令:umount DEVIVE#或者umount PATH
4、卸载的时候不要在挂载点目录下进行卸载,会报错,因为进入挂载点目录这个进程正在使用中,无法被卸载
查看已经挂载的设备
1.命令:mount
通过查看/etc/mtab文件显示当前已挂载的所有设备的信息,挂载选项,文件系统类型等
2.查看内核追踪到的已挂载的所有设备:cat /proc/mounts,即使隐藏挂载也能找到)
3.mount常用命令选项(options)
-t vsftype:指定要挂载的设备上的文件系统类型
-r: readonly,只读挂载
-w: read and write, 读写挂载,默认
-n: 不更新/etc/mtab,即使用mount命令不可见
-a:自动挂载所有支持自动挂载的设备(定义在了/etc/fstab文件中,且挂载选项中有auto功能),在将要挂载的设备写入到fstab文件的时候,不会立即生效,使用mount –a命令使其生效
-L 'LABEL': 以卷标指定挂载设备
-U 'UUID': 以UUID指定要挂载的设备
-B, --bind:
绑定目录到另一个目录上,一个目录挂载到一个目录上,即让一个目录可以有多个路径访问,功能与软连接类似
只能使用df –a才能查看到,只使用df无法查看到
在CentOS7中查看到的内容与CentOS6中不太相同,但功能无影响
-o options:(挂载文件系统的选项),多个选项使用逗号分隔
async:异步模式,挂载操作在内存中更改之后,不会立即写入到硬盘当中(默认)
sync:同步模式,内存更改时,同时写入硬盘
atime/noatime:关闭文件系统的atime更新功能(包含挂载点目录下的所有目录和文件)
diratime/nodiratime:目录的访问时间戳
auto/noauto:是否支持自动挂载,是否支持-a选项
exec/noexec:是否支持将文件系统上运行应用程序
dev/nodev:是否支持在此文件系统上使用设备文件
suid/nosuid:是否支持suid和sgid权限
remount:重新挂载
ro:只读,功能与-r相同
rw:读写,默认
user/nouser:是否允许普通用户挂载此设备,默认管理员才能挂载
acl:启用此文件系统上的acl功能
Defaults:相当于rw, nosuid, dev, exec, auto, nouser, async
swap(虚拟内存)
1.swap:
1)当系统的物理内存不够使用的时候,为了使程序能够运行,借用硬盘中的空间作为虚拟内存使用,速度至少比真正的内 存慢10倍,swap分区不需要挂载
2.交换分区是系统RAM的补充
3.基本设置包括:
创建交换分区或者文件
使用mkswap写入特殊签名
在/etc/fstab文件中添加适当的条目
使用swapon-a **交换空间
4.查看所有内存的信息:free
5.只查看swap的信息:sweapon -s
6.swap的类型:
硬盘作为swap;分区作为swap;文件作为swap;
硬盘:
mkswap /dev/DEVICE:设置
swapon /dev/DEVICE:临时**
swapoff /dev/DEVICE:临时取消
在/etc/fstab中挂载swap
UUID=‘value’ swap swap defaults,pri=’value’ 0 0
分区:
先使用gdisk /dev/DEVICE 创建交换分区,分区类型转换为8200
mkswap /dev/DEVICE#:临时设置
swapon -a /dev/DEVICE:临时**
swapoff /dev/DEVICE#:临时取消
在/etc/fstab中挂载swap
UUID=‘value’ swap swap defaults,pri=’value’ 0 0
文件:
dd if=/dev/zero of=/app/swap.img bs=1M count=512
mkswap /app/swap.img
swapon -a /app/swap.img(会出现建议权限的警告)
swapoff-a:关闭所有的swap
swapon-a:加载/etc/fstab中所有尚未加载的swap设备
7.作为swap的性能:文件最差
8.swap的优先级
1)可以手工指定swap分区0到32767的优先级,值越大优先级越高
2)如果用户没有指定,那么核心会自动给swap指定一个优先级 ,这个优先级从-1开始,每加入一个新的没有用户指定优先级的 swap,会给这个优先级减1
3)先添加的swap的缺省优先级比较高,除非用户自己指定一个优先级,而用户指定的优先级(是正数)永远高于核心缺省指定的优 先级(是负数)
4)优化性能:分布存放,高性能磁盘存
9.设置swap的优先级:swapon -a /dev/DEVICE -p PRIORITY
dd命令:以块的方式进行复制
dd if=/PATH/FROM/SRC of=/PATH/TO/DEST
if=文件名:输入文件名,缺省为标准输入。即指定源文件
of=文件名:输出文件名,缺省为标准输出。即指定目的文件。
ibs=bytes:一次读入bytes个字节,即指定一个块大小为bytes个字节。
obs=bytes:一次输出bytes个字节,即指定一个块大小为bytes个字节。
bs=bytes:同时设置读入/输出的块大小为bytes个字节。
bs=#:block size, 复制单元大小,指即定块大小(既是是ibs也是obs)
count=#:复制多少个bs
cbs=bytes:一次转换bytes个字节,即指定转换缓冲区大小。
skip=blocks:从输入文件开头跳过blocks个块后再开始复制。
seek=blocks:从输出文件开头跳过blocks个块后再开始复制。
(注意:通常只用当输出文件是磁盘或磁带时才有效,即备份到磁盘或磁带时才有效。)
count=blocks:仅拷贝blocks个块,块大小等于ibs指定的字节数
只能拷贝主分区
备份mbr:dd if=/dev/sdb of=/app/mbr.bak bs=1 count=512
ddif=/dev/zero of=/dev/sdb bs=1 count=512
zero代表空分区,破坏mbr中前面512字节的数据
破坏后,硬盘当中的内存当中真实的分区表信息已经没有了,但是内存当中的分区信息不会根据硬盘当中分区信息的改变改变,
在内存中有一个当前生效的的分区表信息,内核会读取这个分区表的信息
使用lsblk查看当前内存中生效的分区表信息
利用mbr.bak还原mbr
1、块设备:block,以“块”为最小存取单位,有存储功能,作为存储的介质,例如: 磁盘,光盘,软盘,磁带机
2、字符设备:char,以“字符”为最小存取单位,没有存储功能,只能进行信息的输 入和输出,例如:终端,键盘
设备文件:
1.关联至一个设备驱动程序,进而能够跟与之对应的硬件设备进行通信
2.操作系统默认把设备文件放置在“/dev/”下
设备号码:
1.主设备号:major number, 标识设备类型
2.次设备号:minor number, 标识同一类型下的不同设备
8,1
8,2
……
3.设备文件是根据设备类型和设备号码(主设备号和此设备号)而创建的
4设备文件的创建:
mknod PATH DEVTYPE MAJORNUM MINORNUM
fidsk-l PATH:查看硬盘信息
df-a:可以查看自己创建的设备文件的挂载等信息
硬盘接口类型
1.并行:
IDE:133MB/s
SCSI:640MB/s
2.串口:
SATA:6Gbps
SAS:6Gbps
USB:480MB/s
3.rpm:rotations,硬盘每分钟的转速,一般常见的为:5400转/分钟;7200转/分钟;15000转/分钟
机械硬盘和固态硬盘
1、机械硬盘(HDD):Hard Disk Drive,即是传统普通硬盘,主要由:盘片,磁头,盘片转轴及控制电机,
1)磁头控制器,数据转换器,接口,缓存等几个部分组成。
2)机械硬盘中所有的盘片都装在一个旋转轴上,每张盘片之间是平行的,在每个盘片的存储面上有一个磁头,
3)磁头与盘片之间的距离比头发丝的直径还小,所有的磁头联在一个磁头控制器上,由磁头控制器负责各个磁头的运动。
4)磁头可沿盘片的半径方向运动,加上盘片每分钟几千转的高速旋转,磁头就可以定位在盘片的指定位置上进行数据的读写操作。
5)数据通过磁头由电磁流来改变极性方式被电磁流写到磁盘上,也可以通过相反方式读取。硬盘为精密设备,进入硬盘的空气必须过滤
2、固态硬盘(SSD):Solid State Drive,用固态电子存储芯片阵列而制成的硬盘,由控制单元和存储单元(FLASH芯片、DRAM芯片)组成。
1)固态硬盘在接口的规范和定义、功能及使用方法上与普通硬盘的完全相同,
2)在产品外形和尺寸上也与普通硬盘一致
3)相较于HDD,SSD在防震抗摔、传输速率、功耗、重量、噪音上有明显优势,
4)SSD传输速率性能是HDD的2倍
5)相较于SSD,HDD在价格、容量、使用寿命上占有绝对优势
6)硬盘有价,数据无价,目前SSD不能完全取代HHD
磁盘设备的设备文件
1.命名:/dev/DEV_FILE
SCSI,SATA, SAS, IDE,USB: /dev/sd
2.虚拟磁盘:/dev/vd
3.不同磁盘标识:a-z,aa,ab…
1)dev/sda,/dev/sdb, ...
2)同一设备上的不同分区:1,2, ...
/dev/sda1,/dev/sda5
硬盘存储术语
head:磁头
secotr:扇区,每个扇区512bytes
track:磁道,一个盘面中所有半径相同的扇区组成的圆环,最外圈的第一个扇区叫做0扇区0磁道
cylinder:柱面,所有盘面的相同磁道组成的圆柱体,所以硬盘有0柱面,1柱面。。。
磁盘的读写顺序是:0柱面-->1柱面-->2柱面。。。
磁盘的三围:
柱面,磁头,扇区(SHR):可以定位一个扇区所在的位置
磁盘扇区和文件系统的块
1、操作系统与磁盘之间交流的最小单位就是磁盘块,它是文件系统虚拟出来的一个概念,对于操作系统来说是读写的最小单位。
2、磁盘进行读写的最小单位是扇区,一般为512字节,扇区是真实存在的,是硬件部分,是一块真实存在的物理区域。
3、由于我们经常接触的是软件部分,而不是硬件部分,所以提的多的是磁盘块。而不是扇区。
4、磁盘块的大小:块=扇区×2^n。因为磁盘进行读写的基本单位是扇区,而操作系统与磁盘之间是利用块进行交流的,所以操作系统想进行读写,最方便的方式就是设置块为扇区的整数倍,一般为4k大小
磁盘的寻址
寻址:物理上,磁盘用来定位数据在磁盘上的物理位置的方式
寻址方式
1.CHS
1)采用24bit位寻址,即用24bit来标识一个磁盘中的所有扇区,
2)其中前10位表示cylinder,中间8位表示head,后面6位表示sector。
3)最大寻址空间8GB,2^24*512/(1024^3)=8
2.LBA
1)LBA是一个整数,通过计算转换的方法转换成CHS格式完成磁盘具体寻址
2)LBA采用48个bit位寻址
3)最大寻址空间128PB
例:LBA12,表示使用LBA寻址方式定位到的扇区;可能是一个扇区也可能是几个扇区
关键点:
1.由于CHS寻址方式的寻址空间在大概8GB以内,所以在磁盘容量小于大概8GB时,可使用CHS寻址方式或是LBA寻址方式;在磁盘容量大于大概8GB时,则只能使用LBA寻址方式
2.一般的大于8G的磁盘,在前8G仍然使用CHS寻址方式寻址,从8G以后此采用LBA寻址方式寻址
磁盘分区
1.为什么分区
1)优化I/O性能
2)实现磁盘空间配额限制
例:规定用户在这个磁盘下只能创建多少空间的文件
3)提高修复速度
例: 文件以块的方式存储在文件系统中,如果存储文件的块很分散(例如日志文件),就会影响文件的读取速率,如果将日 志文件和核心的数据文件放置在一起,产生磁盘碎片的几率就会很大,导致核心数据文件的读取速率十分低下,所以最好在 磁盘中划分出单独的一块区域存储日志文件,即日志文件只存储在这个分区中
4)隔离系统和程序
5)安装多个OS
例:在磁盘的不同分区中安装不同的操作系统
6)采用不同文件系统
例:在磁盘的不同分区中使用不同的文件系统
2.分区方式:
MBR分区
1.MBR分区:MBR:Master Boot Record,1982年,使用32位表示扇区数,分区不超过2T
2.4个主分区:3主分区+1扩展(N个逻辑分区)
3.如何分区:按柱面
4.MBR:存在于磁盘的0磁道0扇区,存储着硬盘主引导记录和磁盘的主分区信息,大小为512bytes,一般用十六进制数表示
5.MBR的内容:
1)主引导程序(偏移地址0000--0088),它负责从活动分区中装载,并运行系统引导程序,bootloader:系统启动的引导信息,446字节,在linux下叫做grub
2)出错信息数据区,偏移地址0089--00E1为出错信息,00E2--01BD全为0字节
3)分区表(DPT,Disk Partition Table)含4个分区项,偏移地址01BE--01FD,分区表:64bytes,每16个字节表示一个分区,一共四个分区
4)结束标志字,偏移地址01FE--01FF2个字节值为结束标志, 为55AA,2字节
6.以十六进制的方式查看MBR:hexdump -C -n 512 /dev/sda -v
7.使用32位的二进制数来表示磁盘上一个分区的总扇区数,磁盘的每个分区的最大空间为2T
8.分区结构
1、GPT:GUID partition table 支持128个分区,使用64位,
2、每个分区最大支持8Z( 512Byte/block ),64Z( 4096Byte/block)
3、使用128位UUID表示磁盘和分区
生成UUID号:uuidgen
4、GPT分区表自动备份在头和尾两份,并有CRC校验位
5、使用UEFI主板(统一扩展固件接口)硬件支持GPT,使操作系统启动
6、分区结构(图)
主板
1、BIOS(基本输入输出系统),只能引导MBR格式分区的磁盘,不能引导GPT格式分区的磁盘
2、UEFI(统一扩展固件接口),支持引导GTP格式分区的磁盘
管理分区
1.查看当前内存中加载的分区表信息,不一定与硬盘中的分区表信息实时同步
lsblk:该命令默认情况下以树形格式打印所有块设备(RAM磁盘除外)
cat/proc/partitions
ls/dev/sdN*:N表示设备名
2.创建分区
1)fdisk:创建MBR分区,在Centos7中也支持GPT分区
2)gdisk创建GPT分区
3)parted高级分区操作(创建、复制、调整大小等等)
4)partprobe重新设置内存中的内核分区表版本
fdisk:
parted:parted的操作都是实时生效的,小心使用
交互式创建分区:
非交互式创建分区:
gdisk
类似于fdisk
使用gdisk进行非交互式分区,一般适用于脚本中:
方法一:
方法二:
3.同步分区表
通知内核重新读取磁盘的分区表
Centos6
更新增加的分区时使用
partx-a /dev/DEVICE
kpartx-a /dev/DEVICE -f: force
删除分区时使用
partx-d --nr M-N /dev/DEVICE
CentOS5,7
partprobe[/dev/DEVICE]
文件系统
文件系统是操作系统用于明确存储设备或分区上的文件的方法和数据结构,即在存储设备上组织文件的方法。操作系统中负责管理和存储文件信息的软件结构称为文件管理系统,简称文件系统
从系统角度来看,文件系统是对文件存储设备的空间进行组织和分配,负责文件存储并对存入的文件进行保护和检索的系统。具体地说,它负责为用户建立文件,存入、读出、 修改、转储文件,控制文件的存取,安全控制,日志,压缩,加密等
查看支持的文件系统:cd /lib/modules/`uname –r`/kernel/fs
文件系统类型
1.根据平台和用途
1)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:未经处理或者未经格式化产生的文件系统
2)windows文件系统
2.根据其是否支持"日志(journal)"功能:
1)日志型文件系统: ext3, ext4, xfs
2)非日志型文件系统: ext2, vfat
解释-->日志功能:
系统日志:/var/log:监控,用来状态的记录,进行拍错
oracle数据库中的redo log日志:
数据先在内存中进行修改,不会实时地写入硬盘,隔段时间写入一次硬盘,数据在内存中修改之后会写入redo log日志中,实时记录做过哪些操作,记录对数据库所做的修改,一旦在数据写入硬盘之前发生故障,在数据库重启之后, 会读取redo log日志,将对数据库所做的操作再做一次,进行数据的恢复
文件系统的日志:
inode中的bitmap
block中的bitmap
两种bitmap中记录着inode和block的状态,空闲为0,占用为1,每分配一个inode和block都会记录在文件系统日志中
如果在还未将内存中的inode和block的状态信息写入bitmap之前,发生了故障,例如断电,这种情况视为文件系 统的非正常卸载,则在系统重启之后,会对文件系统的状态值进行检查,检查是否是正常卸载,如果 是非正常卸载,会根据文件系统日志对已分配的inode和block进行检查,检查是否与bitmap中记录的inode和block的状态是否相同,如果 不同就会作出修复
文件系统的选择
文件系统的组成部分:
1.内核中的模块:ext4, xfs,vfat
2.用户空间的管理工具:mkfs.ext4,mkfs.xfs,mkfs.vfat
3.Linux的虚拟文件系统:VFS(?)
查看当前支持的文件系统:cat /proc/filesystems
查看当前已经挂载的设备的文件系统的类型:,mount
创建文件系统:
mkfs命令
1、mkfs.FS_TYPE /dev/DEVICE#
2、mkfs -t FS_TYPE /dev/DEVICE#
3、在ext4的文件系统设定卷标:
mkfs.FS_TYPE–L ‘LABEL’/dev/DEVICE#
mkfs-t FS_TYPE –L ‘LABEL’/dev/DEVICE#
4、FS_TYPE(文件系统类型):ext4,xfs(只有CentOS7支持),btrfs,vfat
mke2fs:ext系列文件系统专用管理工具
-t{ext2|ext3|ext4} /dev/DEVICE
创建文件系统,相当于mkfs,{ext2|ext3|ext4},或者mkfs –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:关闭指定特性
查看块设备(分区)
blkid[OPTION]... [DEVICE]
-UUUID: 根据指定的UUID来查找对应的设备
-LLABEL:根据指定的LABEL来查找对应的设备
e2label:管理ext系列文件系统的LABEL
e2labelDEVICE#:查看卷标
e2labelDEVICE# [LABEL]:设置、更改卷标
findfs:查找分区
findfs[options] LABEL=<label>:功能与blkid –L相同
findfs[options] UUID=<uuid>:功能与blkid –U相同
tune2fs:重新设定ext系列文件系统可调整参数的值
-l /dev/DEVICE#:查看指定文件系统超级块信息;super block(超级块的分组·)
-L 'LABEL' /dev/DEVICE#:修改卷标
-m # /dev/DEVICE#:修预留给管理员的空间百分比
-j /dev/DEVICE#: 将ext2升级为ext3
-O /dev/DEVICE#: 文件系统属性启用或禁用,
禁用has_journal:–O ^has_journal
开启has_joutnal:-O has_journal
-o /dev/DEVICE#: 调整文件系统的默认挂载选项
默认选项取消acl:–o ^acl
默认选项添加acl:-o acl
-U UUID /dev/DEVICE#: 修改UUID号
-h /dev/DEVICE#:查看超级块信息,不显示分组信息
dumpe2fs /dev/DEVICE#:查看指定的ext系列文件系统的超级块信息
超级块
超级块的作用是存储文件系统的大小,有多少是空的和已经填满的占多少,以及它们各自的总数和其他诸如此类等信息
文件系统的检测和修复(ext系列文件系统)
常发生于死机或者非正常关机之后
挂载为文件系统标记为“no clean”
注意:一定不要在挂载状态下修复
fsck:文件系统检测
fsck.FS_TYPE
fsck-t FS_TYPE
-p:自动修复错误
-r:交互式修复错误
FS_TYPE一定要与分区上已经创建的文件系统类型相同
e2fsck:ext系列文件专用的检测修复工具
-y:自动回答为yes
-f:强制修复
挂载
1、挂载:将额外文件系统与根文件系统某现存的目录建立起关联关系,进而使得此目录做为其它文件访问入口的行为
2、命令:mount [命令选项] [–o 挂载选项] DEVICE# PATH
DEVICE#:
1)设备文件:例如/dev/sda5
2)-L'LABEL', 例如 -L 'hello'
3)-U'UUID'
4) 伪文件系统名称:proc,sysfs, devtmpfs, configfs
PATH--->挂载点(mountPoint)
1)与额外文件系统建立关系的根文件系统某现存的目录叫做挂载点
2)挂载时只指定 DEVICE#或者PATH的情况:
3)在/etc/fstab文件中添加之后可以单独指定一个参数进行挂载
3、挂载点目录要事先存在;建议使用空目录
4、若挂载点目录非空,挂载点目录下原有文件在挂载完成后会被临时隐藏
卸载:
1、为解除此关联关系的过程
2、卸载时,可以指定可使用设备,也可以使用挂载点
3、命令:umount DEVIVE#或者umount PATH
4、卸载的时候不要在挂载点目录下进行卸载,会报错,因为进入挂载点目录这个进程正在使用中,无法被卸载
查看已经挂载的设备
1.命令:mount
通过查看/etc/mtab文件显示当前已挂载的所有设备的信息,挂载选项,文件系统类型等
2.查看内核追踪到的已挂载的所有设备:cat /proc/mounts,即使隐藏挂载也能找到)
3.mount常用命令选项(options)
-t vsftype:指定要挂载的设备上的文件系统类型
-r: readonly,只读挂载
-w: read and write, 读写挂载,默认
-n: 不更新/etc/mtab,即使用mount命令不可见
-a:自动挂载所有支持自动挂载的设备(定义在了/etc/fstab文件中,且挂载选项中有auto功能),在将要挂载的设备写入到fstab文件的时候,不会立即生效,使用mount –a命令使其生效
-L 'LABEL': 以卷标指定挂载设备
-U 'UUID': 以UUID指定要挂载的设备
-B, --bind:
绑定目录到另一个目录上,一个目录挂载到一个目录上,即让一个目录可以有多个路径访问,功能与软连接类似
只能使用df –a才能查看到,只使用df无法查看到
在CentOS7中查看到的内容与CentOS6中不太相同,但功能无影响
-o options:(挂载文件系统的选项),多个选项使用逗号分隔
async:异步模式,挂载操作在内存中更改之后,不会立即写入到硬盘当中(默认)
sync:同步模式,内存更改时,同时写入硬盘
atime/noatime:关闭文件系统的atime更新功能(包含挂载点目录下的所有目录和文件)
diratime/nodiratime:目录的访问时间戳
auto/noauto:是否支持自动挂载,是否支持-a选项
exec/noexec:是否支持将文件系统上运行应用程序
dev/nodev:是否支持在此文件系统上使用设备文件
suid/nosuid:是否支持suid和sgid权限
remount:重新挂载
ro:只读,功能与-r相同
rw:读写,默认
user/nouser:是否允许普通用户挂载此设备,默认管理员才能挂载
acl:启用此文件系统上的acl功能
Defaults:相当于rw, nosuid, dev, exec, auto, nouser, async
swap(虚拟内存)
1.swap:
1)当系统的物理内存不够使用的时候,为了使程序能够运行,借用硬盘中的空间作为虚拟内存使用,速度至少比真正的内 存慢10倍,swap分区不需要挂载
2.交换分区是系统RAM的补充
3.基本设置包括:
创建交换分区或者文件
使用mkswap写入特殊签名
在/etc/fstab文件中添加适当的条目
使用swapon-a **交换空间
4.查看所有内存的信息:free
5.只查看swap的信息:sweapon -s
6.swap的类型:
硬盘作为swap;分区作为swap;文件作为swap;
硬盘:
mkswap /dev/DEVICE:设置
swapon /dev/DEVICE:临时**
swapoff /dev/DEVICE:临时取消
在/etc/fstab中挂载swap
UUID=‘value’ swap swap defaults,pri=’value’ 0 0
分区:
先使用gdisk /dev/DEVICE 创建交换分区,分区类型转换为8200
mkswap /dev/DEVICE#:临时设置
swapon -a /dev/DEVICE:临时**
swapoff /dev/DEVICE#:临时取消
在/etc/fstab中挂载swap
UUID=‘value’ swap swap defaults,pri=’value’ 0 0
文件:
dd if=/dev/zero of=/app/swap.img bs=1M count=512
mkswap /app/swap.img
swapon -a /app/swap.img(会出现建议权限的警告)
swapoff-a:关闭所有的swap
swapon-a:加载/etc/fstab中所有尚未加载的swap设备
7.作为swap的性能:文件最差
8.swap的优先级
1)可以手工指定swap分区0到32767的优先级,值越大优先级越高
2)如果用户没有指定,那么核心会自动给swap指定一个优先级 ,这个优先级从-1开始,每加入一个新的没有用户指定优先级的 swap,会给这个优先级减1
3)先添加的swap的缺省优先级比较高,除非用户自己指定一个优先级,而用户指定的优先级(是正数)永远高于核心缺省指定的优 先级(是负数)
4)优化性能:分布存放,高性能磁盘存
9.设置swap的优先级:swapon -a /dev/DEVICE -p PRIORITY
dd命令:以块的方式进行复制
dd if=/PATH/FROM/SRC of=/PATH/TO/DEST
if=文件名:输入文件名,缺省为标准输入。即指定源文件
of=文件名:输出文件名,缺省为标准输出。即指定目的文件。
ibs=bytes:一次读入bytes个字节,即指定一个块大小为bytes个字节。
obs=bytes:一次输出bytes个字节,即指定一个块大小为bytes个字节。
bs=bytes:同时设置读入/输出的块大小为bytes个字节。
bs=#:block size, 复制单元大小,指即定块大小(既是是ibs也是obs)
count=#:复制多少个bs
cbs=bytes:一次转换bytes个字节,即指定转换缓冲区大小。
skip=blocks:从输入文件开头跳过blocks个块后再开始复制。
seek=blocks:从输出文件开头跳过blocks个块后再开始复制。
(注意:通常只用当输出文件是磁盘或磁带时才有效,即备份到磁盘或磁带时才有效。)
count=blocks:仅拷贝blocks个块,块大小等于ibs指定的字节数
只能拷贝主分区
备份mbr:dd if=/dev/sdb of=/app/mbr.bak bs=1 count=512
ddif=/dev/zero of=/dev/sdb bs=1 count=512
zero代表空分区,破坏mbr中前面512字节的数据
破坏后,硬盘当中的内存当中真实的分区表信息已经没有了,但是内存当中的分区信息不会根据硬盘当中分区信息的改变改变,
在内存中有一个当前生效的的分区表信息,内核会读取这个分区表的信息
使用lsblk查看当前内存中生效的分区表信息
利用mbr.bak还原mbr
ddif=mbr.bak of=/dev/sdb bs=1 count=512