版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
磁盘管理介绍
冯诺依曼体系的五大部件:
输入设备、输出设备、运算器、控制器、存储器
输入和输出设备称之为I/O设备,运算器和控制器称之为CPU,存储器例如内存,硬盘等。计算器其实只要有CPU和内存就已经可以完成任务了,输入和输出都在内存中实现,但是内存属于随机存储单元,断电就会导致数据的丢失,因此就需要通过其他辅助的存储来弥补,这些辅助的存储就是硬盘,光驱等;
对Linux而言,其哲学思想之一就是一切皆文件,因此Linux上所有设备的操作都是通过文件来实现的,我们访问一个设备的时候就相当于访问一个文件,因此我们称之为设备文件。
操作系统会将硬盘文件映射为一个一个的文件,我们在文件中写入信息就相当于在硬盘中写入信息;
在根目录下有一个存放设备文件的目录/dev/,在此目录下看到的文件,都是硬件设备映射的对应的文件名称
磁盘设备的文件命名:
硬盘设备被命名为:sd开头
第一块硬盘为sda,第一个硬盘的第一个分区为sda1,第二个是sda2,以此类推
第二块硬盘为sdb,第一个硬盘的第一个分区为sdb1,第二个是sdb2,以此类推
……
光盘设备被命名为:sr
第一个光盘为sr0,第二个光盘为sr1,以此类推
硬盘格式
硬盘又分为两种格式MBR和GPT
MBR:在硬盘的0磁道0扇区上,该扇区大小公512个字节,专门用来存储MBR引导信息。
MBR又分三部分:
446个字节:存储boot loader,引导加载器
64个字节:存储分区表,有多少个分区,每个分区从哪里开始再到哪里结束;其中每16个字节表示一个分区,因此,在MBR格式的硬盘上最多只能有四个主分区
2个字节:前面信息的有效标识,结束标志。用四个16进制数表示为55aa,表示前510个字节是有效的
因为只有64个字节存放分区信息,所以MBR格式的硬盘上最多可分四个主分区,也可以划分三个主分区+一个扩展分区,扩展分区又可以划分多个逻辑分区;
需要注意的是MBR最多支持2T的分区,超过2T的MBR识别不了,就需要GPT来实现
GPT:兼容MBR,最多可创建128个主分区,因为主分区数量够多,不在需要扩展分区,同时GPT也打破了MBR的最多2T分区的概念
磁盘管理工具
MBR管理工具:fdisk
GPT管理工具:gdisk
高级管理工具:parted
fdisk:创建磁盘分区管理工具,MBR格式文件系统管理工具
fdisk -l:查看分区信息
fdisk /dev/device_name
fdisk创建分区会开启一个交互式窗口,其中很很多命令
m:查看可使用的命令有哪些
p:显示当前磁盘的分区信息
n:创建新分区
p:为主分区
e:为扩展分区
d:删除分区
w:保存分区信息并退出
q:不保存分区信息退出
t:修改分区的系统ID
l:列出系统上所有的系统ID
gdisk:创建磁盘分区管理工具,GPT格式文件系统管理工具,和fdisk基本相同
gdisk -l:查看分区信息
gdisk /dev/device_name
gdisk创建分区会开启一个交互式窗口,其中很很多命令
?
p:显示当前磁盘的分区信息
n:创建新分区
d:删除分区
w:保存分区信息并退出
q:不保存分区信息退出
l:列出系统上所有的系统ID
parted:综合管理
parted /dev/sdb mklabel gpt|msdos(mbr):定制磁盘格式为gpt|mbr
partef /dev/sdb print :显示硬盘信息
parted /dev/sdb mkpart primary 1 200 :创建一个主分区;extended(扩展分区),logical(逻辑分区)
parted /dev/sdb rm 1:删除编号为1的分区
parted -l :列出磁盘信息
新添加的硬盘系统不会识别,使用命令让系统重读硬盘信息
echo - - - > /sys/class/scsi_host/host2/scan :如果host2不行试试host0
对于刚常见号的分区来说,系统还没有识别,需要手动识别
重启是一种方法
centos6:part -a /dev/device_name :系统重读添加一个磁盘
part -d /dev/device_name :系统重读移除一个磁盘
centos7:partprobe :系统重读分区信息
文件系统分类
常用的Linux文件系统:ext4,xfs,swap等
交换文件系统:swap
网络文件系统:nfs,ftp等
集群文件系统:GFS,OCFS
分布式文件系统:ceph,moosefs,mogilefs等
光盘文件系统:iso9660
创建文件系统:
mkfs命令
第一种方式:直接使用以文件系统为后缀的命令mkfs.btrfs、mkfs.ext2、mkfs.ext4、mkfs.minix、mkfs.vfat、mkfs.cramfs、mkfs.ext3、mkfs.fat、mkfs.msdos、mkfs.xfs
第二种方式:-t:指定文件系统类型
-L:设定卷标,相当于注释
对于交换文件系统swap,有特定的工具,但是要将磁盘的系统ID改为8e
mkswap /dev/device_name
blkid:查看指定设备的属性信息
-U:根据UUID查找到对应的设备
-L:根据卷标查找到对应的设备
tune2fs:调整文件系统的相关属性
-l:查看超级块中的信息
-L:设定或修改卷标
-m:调整预留百分比
-r:指定预留块数
-o:设定默认挂在选项
-c #:指定挂载次数达到#次后进行自检,0或-1为关闭此功能
-i #:每次挂载多少天之后进行自检,0或-1为关闭此功能
dumpe2fs:显示文件系统属性信息
-h:只显示超级块中的信息
文件系统的检测:
fsck:检查并修复Linux文件系统,修复完成后文件会变得不完整
-t:指定文件系统类型
-a:自动修复
-r:交互式修复
e2fsck:专用于修复ext 系列的文件系统
-y:对问题自定回复yes
-f:强制检查
-p:自动修复
超级块
作用是存储文件系统的大小,有多少是空的和已经填满的占多少,以及他们各自的总数和其他信息,要是用一个分区来访问数据,第一个就访问的是超级块,所以超级块如果坏了,那磁盘就基本没救了
超级块占用第一号物理块,是文件系统的控制块。
超级块包括:文件系统的大小,空闲块的数目,空闲块的索引表,空闲的iNode节点数目,空闲的iNode索引表等等。
为了防止超级块损坏,就需要对超级块进行备份,以便损坏时可以修复。
文件系统的挂载
硬盘在格式化完成后需要挂载才可以使用,所谓的挂载就是将分区或者磁盘和根文件系统下的某一目录进行关联,如果挂载目录原来有内容的话,会被隐藏,并不是覆盖删了;
mount:挂载工具
格式:mount 设备 挂载点
根文件系统默认给定了临时挂载点:/mnt、/opt、/media
当然也可以挂载到别的目录,但是挂载目录必须事先存在,且最好为空目录,要不目录下文件将被隐藏;
常用的mount挂在选项:
-t:指定文件系统类型
-r:只读挂载,目录下内容只可以读
-w:读写挂载,目录下内容可读可写,可修改
-L label:以卷标方式指定设备,mount -L label 挂载点,很少用
-U UUID:以UUID的方式指定设备,通常写在/etc/fstab文件中,常用
-a:自动挂载/etc/fstab文件中的所有设备,会自动扫描,没有挂载的就会挂载,已经挂载的忽略
-n:挂载时,不更新/etc/mtab文件
-B:绑定到一个目录上
-o option:mount的-o选项丰富多彩,定制很多可用的挂载选项;
remount:重新挂载,在不卸载的情况下添加额外挂载选项
ro:只读挂载
rw:读写挂载
async:异步I/O,数据写操作先在内存完成,然后在整体同步到磁盘上
sync:同步I/O,数据一边写一边存到磁盘上
atime/noatime:是否修改文件的访问时间,追求性格时可关闭,因为修改访问时间也会有写磁盘操作
dirname/nodirname:是否修改目录的访问时间
auto/noauto:设备是否支持自动挂载,mount -a选项
dev/nodev:是否支持在此设备上使用设备文件
exec/noexec:是否允许执行此设备上的二进制程序
suid/nosuid:是否支持次设备上的文件拥有特殊权限
user/nouser:是否支持普通用户挂在此设备
acl:在此设备上是否支持使用ACL,centos7默认支持,之前的版本默认不支持
挂载时可同时使用多选项,使用逗号隔开即可
mount不加选项默认的挂载选项:
rw,suid,dev,exec,auto,nouser,async
交换分区的挂载:
swapon:启用swap分区
-a:使/etc/fstab中,所有标记了'sw'的交换设备生效
-s:显示系统上所有swap分区信息
-p #:可指定优先级
swapoff:禁用一个swap分区
-a:禁用所有
free:可查看内存和swap使用信息情况
-m:以MB为单位显示
-g:以GB为单位显示
文件系统空间查看工具:df,du
df:列出文件系统的整体磁盘使用量
-a :列出所有的文件系统,包括系统特有的 /proc 等文件系统;
-k :以 KBytes 的容量显示各文件系统;
-m :以 MBytes 的容量显示各文件系统;
-h :以人们较易阅读的 GBytes, MBytes, KBytes 等格式自行显示;
-H :以 M=1000K 取代 M=1024K 的进位方式;
-T :显示文件系统类型, 连同该 partition 的 filesystem 名称 (例如 ext3) 也列出;
-i :不用硬盘容量,而以 inode 的数量来显示
du:检查磁盘空间使用量
-a :列出所有的文件与目录容量,因为默认仅统计目录底下的文件量而已。
-h :以人们较易读的容量格式 (G/M) 显示;
-s :列出总量而已,而不列出每个各别的目录占用容量;
-S :不包括子目录下的总计,与 -s 有点差别。
-k :以 KBytes 列出容量显示;
-m :以 MBytes 列出容量显示;
dd:用指定大小的块拷贝一个文件,并在拷贝的同时进行指定的转换。
参数:
if=文件名:输入文件名,默认为标准输入。即指定源文件。
of=文件名:输出文件名,缺省为标准输出。即指定目的文件。
bs=bytes:同时设置读入/输出的块大小为bytes个字节。
count=blocks:仅拷贝blocks个块,块大小等于ibs指定的字节数。
常用就是以上四个
例:dd if=/dev/zero of=/root/file1 bs=1 count=1G,会生成一个1G大小的文件
dd命令可以测试磁盘的IO速率,以上例子就可看出
ibs=bytes:一次读入bytes个字节,即指定一个块大小为bytes个字节。
obs=bytes:一次输出bytes个字节,即指定一个块大小为bytes个字节。
cbs=bytes:一次转换bytes个字节,即指定转换缓冲区大小。
skip=blocks:从输入文件开头跳过blocks个块后再开始复制。
seek=blocks:从输出文件开头跳过blocks个块后再开始复制。
conv=conversion:用指定的参数转换文件。
ascii:转换ebcdic为ascii
ebcdic:转换ascii为ebcdic
ibm:转换ascii为alternate ebcdic
block:把每一行转换为长度为cbs,不足部分用空格填充
unblock:使每一行的长度都为cbs,不足部分用空格填充
lcase:把大写字符转换为小写字符
ucase:把小写字符转换为大写字符
swab:交换输入的每对字节
noerror:出错时不停止
notrunc:不截短输出文件
sync:将每个输入块填充到ibs个字节,不足部分用空(NUL)字符补齐
查看挂载的方式:
mount
df
cat /proc/mounts
cat /etc/mtab
文件系统卸载:
注意:要确定挂载点目录没有被访问,确定自己不再此目录中
umount 设备 或 umount 挂载目录
在卸载前可查看有哪些进程正在访问此挂载点目录
fuser -v 挂载点
如果想强行卸载,需要终止访问挂载点的进程:
fuser -km
实现开机自动挂载
以上是临时挂载,重启则失效,要开机自动挂载就需要写到文件中,其实Linux要想永久生效一个事情,就是写入到配置文件中
/etc/fstab :文件内记录的条目对应不同的设备,系统启动后会读此文件,自动挂载文件中记录的设备
文件的格式:每一行为一个设备的挂载信息。
一行中的信息有:
挂载的设备,可以使用的方式:
设备名、UUID、卷标名
挂载点,某一目录
文件系统的类型
挂载的选项,mount -o命令中的选项,可以有多个,使用逗号隔开
转储的评率:
0:不转储
1:每天转储
2:每隔一天
自检次序:
0:不自检
1:首先自检,通常只有根文件系统需要首先自检
2:次级自检,不同的设备可使用同一个自检次序
3:依次类推
软件raid简单介绍
什么是raid:(独立的磁盘冗余阵列)
优点:提高IO能力,磁盘并行读写
提高耐用性:磁盘冗余来实现
raid实现的方式:
外接式磁盘阵列,通过硬件raid卡提供raid功能
内接式raid:主板集成raid控制器,安装OS前在在BIOS例配置
软件raid:通过操作系统实现
/proc/mdstat:此文件保存raid信息
raid级别:
raid-0:分布式存储数据
读、写性能提升
无容错能力
最少磁盘数2,2+
磁盘利用率100%
raid-1:镜像式存储数据
读性能提升、写性能略有下降
有冗余能力
最少磁盘数2,2N
可用空间50%
raid-5:
读、写性能提升
有冗余能力,允许最多一块磁盘损坏
最少磁盘数3,3+
可用空间 :N-1
raid-6:
读、写性能提升
有容错能力,允许最多两块盘损坏
最少磁盘数4,4+
可用空间 :N-2
raid-1 0 === raid-0 1 :先做1 在做0 或者 先做0 在做1
读、写性能提升
有容错能力。每组镜像最多只能坏一块
最少磁盘数4,4+
可用空间100%
raid-10用的多
实现软件radio
mdadm工具:为软件raid提供管理
-V:版本信息
-v:创建时详细信息
-q:静默模式
创建选项:-C
-l:指定raid级别
-n:设备的个数
-a:yes|no,是否自动创建设备文件
-c:指定chunk大小
-x:指定空闲盘个数
管理选项:--add
-r:移除一个设备
-f:模拟一个设备故障
创建一个软件raid
要求:创建一个可用空间为1G的RAID1设备,文件系统为ext4,有一个空闲盘,开机可自动挂载至/mnt/raid目录
创建raid1需要两块磁盘,这里选用sdb sdc做练习,空闲磁盘用sdd
首先使用fdisk工具将硬盘分区,id修改为raid
sdc也是同样的方法创建分区,因为时组织在一起使用,我们创建完raid之后再进行格式化,不需要单个磁盘格式化
创建raid并查看
格式化并挂载
测试raid:将一块盘模拟坏掉,空闲盘自动替换上去
在raid挂载陌路copy一些文件再次模拟磁盘故障查看文件是否可访问,测试raid1特性
查看文件是否可正常访问
清除软件raid
此时创建raid并清除raid完成!!
扫描二维码关注公众号,回复:
7656529 查看本文章
实验:将/home目录搬家
在有些时候,用户在自己家目录下创建大文件,因为/home目录在根分区上,所以/home目录的增大就会将系统盘容量变
小,系统盘一旦满了,就会崩溃,数据就完蛋了
因此我们将/home目录单独挂载在一个分区上,这样/home目录变大只会影响那个硬盘分区,系统盘就不会有什么事了。
将home目录下文件迁移:
fdisk /dev/sda6 :根据需求创建出一个[10]G的分区
mkfs.xfs /dev/sda6 :格式化
mkdir /data/home
mount /dev/sda6 /data/home :挂载
cp -a /home /data/home :将home下文件不变属性的方式复制一份到/data/home这个临时目录下
/home下原有文件建议保留,也可以复制到其他地方当作备份,看情况而定
编辑/etc/fstab,以UUID方式将/dev/sda6挂载至/home,/home下原有文件会被隐藏,因为之前将home下文件
往/dev/sda6里面复制了一份,所以直接挂载就可以
如果想删除/home下源文件,需要卸载然后删除再挂载上