Linux常用命令(文件系统与磁盘相关操作)
1、基础知识
1:通常称呼一个可被挂载的数据为一个文件系统而不是一个分区。
2:操作系统的文件数据除了文件的实际内容外,通常含有非常多的属性,例如Linux操作系统的文件权限(rwx)与文件属性(所有者、群组、时间参数等)。文件系统通常会将这两部分的数据分别存放在不同的块,权限与属性放置到inode中,至于实际数据则放置到data block块中。另外还有一个超级块(super block)会记录整个文件系统的整体信息,包括inode与block的总量、使用量、剩余量等。每个inode与block都有编号,这三个数据的意义简略说明如下:
super block:记录此文件系统的整体信息,包括inode/block的总量、使用量、剩余量,以及文件系统的格式与相关信息等。
inode:记录文件的属性,一个文件占用一个inode,同时记录此文件的数据所在的block号码。
block:实际记录文件的内容,若文件太大时,会占用多个block。
3:挂载点的意义:
每个文件系统都有独立的inode、block、super block等信息,这个文件系统要能够链接到目录树才能够被使用。将文件系统与目录树结合的操作称为挂载。挂载点一定是目录,该目录为进入该文件系统的入口。因此并不是所有文件系统都能使用,必须要“挂载”到目录树的某个目录后,才能够使用该文件系统。
存储管理
主要知识点:基本分区,逻辑LVM,ext3/4xfs文件系统,RAID
硬盘的分类:
常见磁盘类型:
SAS 硬盘
SATA 硬盘
SSD 硬盘
SCSI 硬盘
IDE 硬盘
SSD采用电子存储介质进行数据存储和读取的一种技术,突破了传统机械硬盘的性能瓶颈, 拥有极高的存储性能,被认为是存储技术发展的未来新星。
与传统硬盘相比,SSD固态电子盘具有以下优点:
第一,SSD不需要机械结构,完全的半导体化,不存在数据查找时间、延迟时间和磁盘寻道时间,数据存取速度快。
第二,SSD全部采用闪存芯片,经久耐用与硬物碰撞,数据丢失的可能性也能够降到最小。
第三,得益于无机械部件及闪存芯片,SSD没有任何噪音,功耗低。
第四,质量轻,比常规1.8英寸硬盘重量轻20-30克,使得便携设备搭载多块SSD成为可能。同时因其完全半导体化
无结构限制,可根据实际情况设计成各种不同接口、形状的特殊电子硬盘。
3、从分区方式区分
MBR (MSDOS根据分区表来分区的) <2TB
#分区工具:fdisk
一共可以分4个分区(4个主分区,扩展分区,逻辑分区) 例如: 3主 + 1扩展(n逻辑)
MBR 小于2TB的可以。
一块硬盘最多分4个主分区。
GPT >2TB和<2TB
#分区工具:gdisk(parted---rhel6)
一共可以分128个主分区
GPT大于小于2TB都可以。
#注意:从MBR转到GPT,或从GPT转换到MBR会导致数据全部丢失!
基本分区
1:添加磁盘:热插拔,直接插上磁盘即可。非热插拔,插上重启,或关闭服务器插上磁盘:
2:创建分区:使用mbr分区方式,使用fdisk分区工具,
刷新分区表(建议执行),pratprobe /dev/sdb
3:创建挂载点: /mnt /data15
4:格式化文件系统:mkfs.ext4 /dev/sdb
5:挂载:在新建个目录,mkdir /data15 ;
用来挂载这个分区。mount /dev/sdb5 /data15
6:检查:查看挂载是否成功:df -TH /data15
思考题:为什么要单独挂载数据盘
yum install -y ntfs-3g #自动识别磁盘
ll /dev/sd* #查看全部sd的磁盘
lsblk (list block devices)用于列出设备及其状态,
4、查看磁盘分区:fdisk
fdisk命令中的参数以作用
参数 作用
a 切换可启动标志
b 编辑bsd disklabel
c 切换dos兼容性标志
d 删除分区
g 创建一个新的空GPT分区表
G 创建一个IRIX(SGI)分区表
l 列出已知的分区类型
m 打印此菜单
n 添加一个新分区
o 创建一个新的空DOS分区表
p 打印分区表
q 退出而不保存更改
s 创建一个新的空Sun disklabel
t 更改分区的系统ID
u 更改显示/输入单位
v 验证分区表
w 将表写入磁盘并退出
x 额外功能(仅限专家
5、在系统添加一块磁盘,对磁盘进行分区
MBR 14个分区(4个主分区,扩展分区,逻辑分区)
fdisk分区工具
fdisk -l /dev/sdb #查看磁盘分区信息
fdisk /dev/sdb #针对MBR格式,创建分区
m 查看帮助
n 新建分区
Partition type: p 新建主分区
p primary (0 primary, 0 extended, 4 free)
e extended
默认回车
设置主分区大小创建主分区,然后
Command (m for help): p ---打印分区信息
创建扩展分区
Command (m for help): n
Partition type:
p primary (1 primary, 0 extended, 3 free)
e extended
Select (default p): e
#注意:扩展分区将剩下的空间全部给了。一路回车即可
创建逻辑分区
Command (m for help): n
Partition type:
p primary (1 primary, 1 extended, 2 free)
l logical (numbered from 5)
Select (default p): l 创建逻辑分区
Adding logical partition 5
First sector (208896-20971519, default 208896):
Using default value 208896
Last sector, +sectors or +size{K,M,G} (208896-20971519, default 20971519): +5G #指定大小
Partition 5 of type Linux and of size 5 GiB is set
Command (m for help): w --保存退出
# partprobe /dev/sdb #更新磁盘分区表,手动让内核更新分区表。不需要重启
# lsblk #查看磁盘设备
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 创建gpt分区表
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 创建mbr分区表
#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)
新建第一个主分区:
Command (m for help): n # 添加分区
Command action
e extended # 添加扩展分区
p primary partition (1-4) # 添加主分区
p # 输入p来创建第一个主分区
Partition number (1-4): 1 # 输入分区号,从1开始
First cylinder (1-1305, default 1): # 输入柱面号,不输人默认是1
Using default value 1
Last cylinder, +cylinders or +size{K,M,G} (1-1305, default 1305): +2G
# 给第一个主分区/dev/sdb1分2G,也可以使用柱面号来指定大小
Command (m for help): p # 第一个分区结束,p查看下已分区信息
Disk /dev/sdb: 10.7 GB, 10737418240 bytes
255 heads, 63 sectors/track, 1305 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: 0x2d8d64eb
Device Boot Start End Blocks Id System
/dev/sdb1 1 262 2104483+ 83 Linux
新建扩展分区:
Command (m for help): n # 再建一个分区
Command action
e extended
p primary partition (1-4)
e # 创建扩展分区
Partition number (1-4): 2 # 扩展分区号为2
First cylinder (263-1305, default 263):
Using default value 263
Last cylinder, +cylinders or +size{K,M,G} (263-1305, default 1305): # 剩余空间全部给扩展分区
Using default value 1305
Command (m for help): p
Disk /dev/sdb: 10.7 GB, 10737418240 bytes
255 heads, 63 sectors/track, 1305 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: 0x2d8d64eb
Device Boot Start End Blocks Id System
/dev/sdb1 1 262 2104483+ 83 Linux
/dev/sdb2 263 1305 8377897+ 5 Extended
新建逻辑分区:
Command (m for help): n # 新建逻辑分区
Command action
l logical (5 or over) # 这里不再是扩展分区标识e,只有l。
# 如果已有3个主分区,这里连l都没有
p primary partition (1-4)
l # 新建逻辑分区
First cylinder (263-1305, default 263): # 这里也不能选逻辑分区号了
Using default value 263
Last cylinder, +cylinders or +size{K,M,G} (263-1305, default 1305): +3G
Command (m for help): p
Disk /dev/sdb: 10.7 GB, 10737418240 bytes
255 heads, 63 sectors/track, 1305 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: 0x2d8d64eb
Device Boot Start End Blocks Id System
/dev/sdb1 1 262 2104483+ 83 Linux
/dev/sdb2 263 1305 8377897+ 5 Extended
/dev/sdb5 263 655 3156741 83 Linux
分区结束,保存。如果不保存,则按q。
Command (m for help): w
The partition table has been altered!
Calling ioctl() to re-read partition table.
Syncing disks.
gdisk分区工具
yum -y install gdisk
分区的时候直接带上设备即可。以下是对新硬盘划分gpt分区的过程。
[root@xiaoqiang ~]# gdisk /dev/sdb
GPT fdisk (gdisk) version 0.8.10
Partition table scan:
MBR: not present
BSD: not present
APM: not present
GPT: not present
Creating new GPT entries.
Command (? for help): ?
b back up GPT data to a file
c change a partition's name
d delete a partition # 删除分区
i show detailed information on a partition # 列出分区详细信息
l list known partition types # 列出所以已知的分区类型
n add a new partition # 添加新分区
o create a new empty GUID partition table (GPT) # 创建一个新的空的guid分区表
p print the partition table # 输出分区表信息
q quit without saving changes # 退出gdisk工具
r recovery and transformation options (experts only)
s sort partitions
t change a partition's type code # 修改分区类型
v verify disk
w write table to disk and exit # 将分区信息写入到磁盘
x extra functionality (experts only)
? print this menu
添加一个新分区。
Command (? for help): n
Partition number (1-128, default 1):
First sector (34-41943006, default = 2048) or {+-}size{KMGTP}:
Last sector (2048-41943006, default = 41943006) or {+-}size{KMGTP}: +10G
Current type is 'Linux filesystem'
Hex code or GUID (L to show codes, Enter = 8300):
Changed type of partition to 'Linux filesystem'
Command (? for help): p
Disk /dev/sdb: 41943040 sectors, 20.0 GiB
Logical sector size: 512 bytes
Disk identifier (GUID): F8AE925F-515F-4807-92ED-4109D0827191
Partition table holds up to 128 entries
First usable sector is 34, last usable sector is 41943006
Partitions will be aligned on 2048-sector boundaries
Total free space is 20971453 sectors (10.0 GiB)
Number Start (sector) End (sector) Size Code Name
1 2048 20973567 10.0 GiB 8300 Linux filesystem
Command (? for help): i
Using 1
Partition GUID code: 0FC63DAF-8483-4772-8E79-3D69D8477DE4 (Linux filesystem)
Partition unique GUID: B2452103-4F32-4B60-AEF7-4BA42B7BF089
First sector: 2048 (at 1024.0 KiB)
Last sector: 20973567 (at 10.0 GiB)
Partition size: 20971520 sectors (10.0 GiB)
Attribute flags: 0000000000000000
Partition name: 'Linux filesystem'
保存分区表到磁盘。
Command (? for help): w
Final checks complete. About to write GPT data. THIS WILL OVERWRITE EXISTING
PARTITIONS!!
Do you want to proceed? (Y/N): Y
OK; writing new GUID partition table (GPT) to /dev/sdb.
The operation has completed successfully.
执行partprobe重新读取分区表信息。
[root@xiaoqiang ~]# partprobe /dev/sdb
gdisk还有几个expert only的命令,其实没什么专家不专家可用的,只需要知道命令何时能用,它们的作用是什么?
在gdisk交互过程命令行下,按下x表示进入扩展功能模式,该模式下的功能大部分都和gpt分区表相关,在不是非常了解gpt分区表结构的时候不建议做修改动作,但是查看信息类是没问题的。以下是扩展功能模式下的命令。
Command (? for help): x
Expert command (? for help): ?
a set attributes
c change partition GUID
d display the sector alignment value
e relocate backup data structures to the end of the disk
g change disk GUID
h recompute CHS values in protective/hybrid MBR
i show detailed information on a partition
l set the sector alignment value
m return to main menu
n create a new protective MBR
o print protective MBR data
p print the partition table
q quit without saving changes
r recovery and transformation options (experts only)
s resize partition table # 修改分区表大小,注意不是分区大小
t transpose two partition table entries
u Replicate partition table on new device # 将分区表导出
v verify disk
w write table to disk and exit
z zap (destroy) GPT data structures and exit # 损毁gpt上的数据
? print this menu
GPT 128个主分区
parted分区工具
[root@xiaoqiang ~]# parted /dev/sdc
GNU Parted 2.1
Using /dev/sdc
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) help
align-check TYPE N check partition N for TYPE(min|opt) alignment
check NUMBER (centos 7上已删除该功能) do a simple check on the file system
cp [FROM-DEVICE] FROM-NUMBER TO-NUMBER (centos 7上已删除该功能) copy file system to another partition
help [COMMAND] print general help, or help on COMMAND
mklabel,mktable LABEL-TYPE create a new disklabel (partition table)
mkfs NUMBER FS-TYPE (centos 7上已删除该功能) make a FS-TYPE file system on partition NUMBER
mkpart PART-TYPE [FS-TYPE] START END make a partition
mkpartfs PART-TYPE FS-TYPE START END (centos 7上已删除该功能) make a partition with a file system
move NUMBER START END (centos 7上已删除该功能) move partition NUMBER
name NUMBER NAME name partition NUMBER as NAME
print [devices|free|list,all|NUMBER] display the partition table,available devices,free space, all found partitions,or a particular partition
quit exit program
rescue START END rescue a lost partition near START and END
resize NUMBER START END (修改分区大小(centos 7上已删除该功能)) resize partition NUMBER and its file system
rm NUMBER (删除分区) delete partition NUMBER
select DEVICE (重选磁盘进入parted状态) choose the device to edit
set NUMBER FLAG STATE (设置分区状态,如将其off或on) change the FLAG on partition NUMBER
toggle [NUMBER [FLAG]] (修改文件系统类型,如swap、lvm) toggle the state of FLAG on partition NUMBER
unit UNIT (修改默认单位,kB/MB/GB等) set the default unit to UNIT
version display the version number and copyright information of GNU Parted
常用的命令是mklabel/rm/print/mkpart/help/quit,至于parted中一些看上去很好的功能如mkfs/mkpartfs/resize等可能会损毁当前数据而不够安全,所以只要使用它的5个常用命令即可。
parted分区的前提是磁盘已经有分区表(partition table)或磁盘标签(disk label),否则将显示unrecognised disk label,这是和fdisk/gdisk不同的地方,所以需要先使用mklabel创建标签或分区表,最常见的标签(分区表)为msdos和gpt,其中msdos分区就是MBR格式的分区表,也就是会有主分区、扩展分区和逻辑分区的概念和限制。
下面使用parted对/dev/sdc创建msdos的新分区。
[root@xiaoqiang ~]# parted /dev/sdc
GNU Parted 2.1
Using /dev/sdb
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) mklabel # 创建磁盘分区标签(分区表类型)
New disk label type? msdos # 选择msdos即MBR类型
# 上面的两步也可以直接一步进行:(parted) mklabel msdos
(parted) mkpart # 开始进行分区
Partition type? primary/extended? p # 创建主分区
File system type? [ext2]? ext4 # 创建ext4文件系统
# (这里虽指明了文件系统,但没有意义,仍需手动格式化并选择文件系统类型)
Start? 1 # 分区开始位置,默认是M为单位,表示从1M开始,也可直接指定1G这种方式
End? 1024 # 分区结束位置,1024-1=1023M
(parted) p # print,查看分区信息
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdc: 21.5GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Number Start End Size Type File system Flags
1 1049kB 1024MB 1023MB primary
# 可以一步完成一个命令中的多个动作
(parted) mkpart p ext4 1026M 4096M # 可一步完成,也可一步完成到任何位置,然后继续交互下一步
# 可能会提示分区未对齐"Warning: The resulting partition is not properly aligned for best performance.",忽略它
(parted) mkpart e 4098 -1 # 创建扩展分区,注意创建扩展分区时不指定文件系统类型;-1表示剩余的全部分配给该分区
(parted) p
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdc: 21.5GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Number Start End Size Type File system Flags
1 1049kB 1024MB 1023MB primary
2 1026MB 4096MB 3070MB primary
3 4098MB 21.5GB 17.4GB extended lba
(parted) mkpart l ext4 4099 8194 # 创建逻辑分区,指定ext4
(parted) mkpart l ext4 8195 -1 # 继续创建逻辑分区
(parted) p
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdc: 21.5GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Number Start End Size Type File system Flags
1 1049kB 1024MB 1023MB primary
2 1026MB 4096MB 3070MB primary
3 4098MB 21.5GB 17.4GB extended lba
5 4099MB 8194MB 4095MB logical
6 8195MB 21.5GB 13.3GB logical
(parted) rm 5 # 删除5号分区
(parted) p
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdc: 21.5GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Number Start End Size Type File system Flags
1 1049kB 1024MB 1023MB primary
2 1026MB 4096MB 3070MB primary
3 4098MB 21.5GB 17.4GB extended lba
5 8195MB 21.5GB 13.3GB logical
(parted) quit # 退出parted工具
Information: You may need to update /etc/fstab. # 提示要更新/etc/fstab中的配置,说明该工具可在线分区
mkfs和mkpartfs等命令不完善,下面的警告信息已经给出了提示。
(parted) mkfs 1
WARNING: you are attempting to use parted to operate on (mkfs) a file system.
parted's file system manipulation code is not as robust as what you'll find in
dedicated, file-system-specific packages like e2fsprogs. We recommend
you use parted only to manipulate partition tables, whenever possible.
Support for performing most operations on most types of file systems
will be removed in an upcoming release.
Warning: The existing file system will be destroyed and all data on the partition will be lost. Do you want to
continue?
parted: invalid token: 1
Yes/No? n
三个分区工具的非交互操作
parted命令只能一次非交互一个命令中的所有动作。如下所示:
parted /dev/sdb mklabel msdos # 设置硬盘flag
parted /dev/sdb mkpart primary ext4 1 1000 # MBR格式分区,分别是partition type/fstype/start/end
parted /dev/sdb mkpart 1 ext4 1M 10240M # gpt格式分区,分别是name/fstype/start/end
parted /dev/sdb mkpart 1 10G 15G # 省略fstype的交互式分区
parted /dev/sdb rm 1 # 删除分区
parted /dev/sdb p # 输出信
如果不确定分区的起点大小,可以加上-s选项使用script模式,该模式下parted将回答一切默认值,如yes、no。
$ parted -s /dev/sdb mkpart 3 14G 16G
Warning: You requested a partition from 14.0GB to 16.0GB.
The closest location we can manage is 15.0GB to 16.0GB.
Is this still acceptable to you?
Information: You may need to update /etc/fstab.
disk实现非交互的原理是从标准输入中读取,每读取一行传递一次操作。
所以可以有两种方式:使用echo和管道传递;将操作写入到文件中,从文件中读取。
例如:下面的命令创建了两个分区。使用默认值时传递空行即可。
echo -e "n\np\n1\n\n+5G\nn\np\n2\n\n+1G\nw\n" | fdisk /dev/sdb
如果要传递的操作很多,则可以将它们写入到一个文件中,从文件中读取。
echo -e "n\np\n1\n\n+5G\nn\np\n2\n\n+1G\nw\n" >/tmp/a.txt
fdisk /dev/sdb </tmp/a.txt
gdisk实现非交互
原理同fdisk。例如:
echo -e "n\n1\n\n+3G\n\nw\nY\n" | gdisk /dev/sdb
上面传递的各参数意义为:新建分区,分区number为1,使用默认开始扇区位置,分区大小+3G,使用默认分区类型,保存,确认。
转格式的时候保证此分区,没有被系统占用。
# parted -s /dev/sdc mklabel gpt #将/dev/sdc(MBR格式)转换成(GPT格式)
# parted -s /dev/sdc mklabel msdos //将/dev/sda(GPT格式)转换成(MBR格式)
parted /dev/sdc mklablegpt
parted /dev/ sdc print #查看系统分区表类型
创建于删除分区:parted [磁盘] mkpart 分区类型 文件系统类型 开始 结束
其中,mkpart指令为创建新的分区,分区类型有:permary logical extended三种,文件系统类型有:fat16 fat32 ext2 ext3 linux-sawp等,开始与结束标记区分开始与结束的位置(默认单位为MB)
parted /dev/sdc/ mkpart primary ext3 2G 3G
parted /dev/sdc rm 2 #删除分区
gdisk参数:
a切换可启动标志
b编辑BSD磁盘
c切换dos兼容性标志
b将GPT数据备份到文件
c更改分区的名称
d删除分区
我在分区上显示详细信息
l列出已知的分区类型
n添加一个新分区
o创建一个新的空GUID分区表(GPT)
p打印分区表
q退出而不保存更改
r恢复和转换选项(仅限专家)
s排序分区
更改分区的类型代码
v验证磁盘
w将表写入磁盘并退出
x额外功能(仅限专家)
# yum -y install gdisk #安装分区工具
# gdisk -l /dev/sdc
# gdisk /dev/sdc
Command (? for help): n --创建分区
Partition number (1-128, default 1):
First sector (34-16777182, default = 2048) or {+-}size{KMGTP}:
Last sector (2048-16777182, default = 16777182) or {+-}size{KMGTP}: +100M
Current type is 'Linux filesystem'
Hex code or GUID (L to show codes, Enter = 8300): ---直接回车
Command (? for help): p --打印分区信息
Command (? for help): w ---保存
Final checks complete. About to write GPT data. THIS WILL OVERWRITE EXISTING
PARTITIONS!!
Do you want to proceed? (Y/N): y 是否覆盖是
OK; writing new GUID partition table (GPT) to /dev/sdc.
The operation has completed successfully.
# partprobe /dev/sdc #刷新分区表
# gdisk -l /dev/sdc
# lsblk
6、创建文件系统(格式化)centos7默认使用xfs
mkfs.ext4 /dev/sdb1 #格式化成ext4格式的文件系统
mkfs.xfs /dev/sdc2 #格式化成xfs格式的文件系统
mkfs工具和mke2fs工具
mkfs工具
mkfs [-t fstype] 分区
该工具非常简单,它只需指定一个可选的-t选项指定要创建的文件系统类型,如果省略则默认创建ext2文件系统。该工具指定的”-t”选项其实是在调用对应文件系统专属的格式化工具。
mke2fs工具
mkfs.ext2/mkfs.ext3/mkfs.ext4或mkfs -t extX其实都是在调用mke2fs工具。
该工具创建文件系统时,会从/etc/mke2fs.conf配置中读取默认的配置项。
mke2fs [ -c ] [ -b block-size ] [ -f fragment-size ] [ -g blocks-per-group ] [ -G number-of-groups ] [ -i bytes-per-inode ] [ -I inode-size ] [ -j ] [ -N number-of-inodes ] [ -m reserved-blocks-percentage ] [ -q ] [ -r fs-revision-level ] [ -v ] [ -L volume-label ] [ -S ] [ -t fs-type ] device [ blocks-count ]
选项说明:
-t fs-type
指定要创建的文件系统类型(ext2,ext3 ext4),若不指定,则从/etc/mke2fs.conf中获取默认的文件系统类型。
-b block-size
指定每个block的大小,有效值有1024、2048和4096,单位是字节。
-I inode-size
指定inode大小,单位为字节。必须为2的幂次方,且大于等于128字节。值越大,说明inode的集合体inode table占用越多的空间,这不仅会挤占文件系统中的可用空间,还会降低性能,因为要扫描inode table需要消耗更多时间,但是在linux kernel 2.6.10之后,由于使用inode存储了很多扩展的额外属性,所以128字节已经不够用了,因此ext4默认的inode size已经变为256,尽inode大小增大了,但因为使用inode存储扩展属性带来的性能提升远高于inode size变大导致的负面影响,所以仍建议使用256字节的inode。
-i bytes-per-inode
指定每多少个字节就为其分配一个inode号。值越大,说明一个文件系统中分配的inode号越少,更适用于存储大量大文件,值越小,inode号越多,更适用于存储大量小文件。该值不能小于一个block的大小,因为这样会造成inode多余。注意,创建文件系统后该值就不能再改变了。
-c
创建文件系统前先检查设备是否有bad blocks。
-f fragment-size
指定fragments的大小,单位字节。
-g blocks-per-group
指定每个块组中的block数量。不建议修改此项。
-G number-of-groups
该选项用于ext4文件系统(严格地说是启用了flex_bg特性),指定虚拟块组(即一个extent)中包含的块组个数,必须为2的幂次方。对于ext4文件系统来说,使用extent的功能能极大提升其性能。
-j
创建带有日志功能的文件系统,即ext3。如果要指定关于日志方面的设置,在-j的基础上再使用-J指定,不过一般默认即可,具体可指定的选项看man文档。
-L new-volume-label
指定卷标名称,名称不得超出16字节。
-m reserved-blocks-percentage
指定文件系统保留block数量的比例,保留一部分block,可以降低物理碎片。默认比例为5%。
-N number-of-inodes
强制指定该文件系统应该分配多少个inode号,它会覆盖通过计算得出inode数量的结果(根据block大小、数量和每多少字节分配一个inode得出Inode数量),但是不建议这么做。
-q
安静模式,可用于脚本中
-S
重建superblock和group descriptions。在所有的superblock和备份的superblock都损坏时有用。它会重新初始化superblock和group descriptions,但不会改变inode table、bmap和imap(若真的改变,该分区数据就全丢了,还不如重新格式化)。在重建superblock后,应该执行e2fsck来保证文件系统的一致性。但要注意,应该完全正确地指定block的大小,其改选项并不能完全保证数据不丢失。
-v
输出详细执行过程
所以,有可能用到的选项一般是-t指定文件系统类型,-b指定block大小,-I指定inode大小,-i指定分配inode的比例。
例如:
$ mke2fs -t ext4 -I 256 /dev/sdb2 -b 4096
mke2fs 1.41.12 (17-May-2010)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
655360 inodes, 2621440 blocks
131072 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=2684354560
80 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632
Writing inode tables: done
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done
This filesystem will be automatically checked every 39 mounts or
180 days, whichever comes first. Use tune2fs -c or -i to override.
提示使用tune2fs修改自动检测文件系统的频率。见下文。
7、挂载mount使用:
mount参数:
mount [-t 欲挂载文件系统类型 ] [-o 特殊选项] 设备名 挂载目录
-a 将/etc/fstab文件里指定的挂载选项重新挂载一遍。
-t 支持ext2/ext3/ext4/vfat/fat/iso9660(光盘默认格式)。不用-t时默认会调用blkid来获取文件系统类型。
-n 不把挂载记录写在/etc/mtab文件中,一般挂载会在/proc/mounts中记录下挂载信息,然后同步到/etc/mtab,指定-n表示不同步该挂载信息。
-o 指定挂载特殊选项。下面是两个比较常用的:
loop 挂载镜像文件,如iso文件
ro 只读挂载
rw 读写挂载
auto 相当于mount -a
dev 如果挂载的文件系统中有设备访问入口则启用它,使其可以作为设备访问入口
default rw,suid,dev,exec,auto,nouser,async,and relatime
async 异步挂载,只写到内存
sync 同步挂载,通过挂载位置写入对方硬盘
atime 修改访问时间,每次访问都修改atime会导致性能降低,所以默认是noatime
noatime 不修改访问时间,高并发时使用这个选项可以减少磁盘IO
nodiratime 不修改文件夹访问时间,高并发时使用这个选项可以减少磁盘IO
exec/noexec 挂载后的文件系统里的可执行程序是否可执行,默认是可以执行exec,优先级高于权限的限定
remount 重新挂载,此时可以不用指定挂载点。
suid/nosuid 对挂载的文件系统启用或禁用suid,对于外来设备最好禁用suid
_netdev 需要网络挂载时默认将停留在挂载界面直到加载网络了。使用_netdev可以忽略网络正常挂载。如NFS开机挂载。
user 允许普通用户进行挂载该目录,但只允许挂载者进行卸载该目录
users 允许所有用户挂载和卸载该目录
nouser 禁止普通用户挂载和卸载该目录,这是默认的,默认情况下一个目录不指定user/users时,将只有root能挂载
mkdir /mnt/huihui #创建挂载目录
mkdir /mnt/xiexie #创建挂载目录(ro只读,rx读写,执行)
mount -o rw /dev/sdb1 /mnt/huihui/ #-o指定读写权限
mount /dev/sdb2 /mnt/xiexie
#remount重新挂载,此时可以不用指定挂载点。
mount -t ext4 -o remount /dev/sdb1 /data1
8、df查看磁盘挂载与磁盘使用空间
参数解释:
-a:列出所有的文件系统,包括系统特有的/proc等文件系统。
-k:以KB的容量显示各文件系统。
-m:以MB的容量显示各文件系统。
-h:以人们较易阅读的GB,MB,KB等格式自行显示。
-H:以M=1000K替代M=1024K的进位方式。
-T:连同该分区的文件系统名称(例如ext3)也列出。
-i:不用硬盘容量,而以inode的数量来显示。
lsblk df -TH 有什么区别?
在硬盘或分区没有挂载之前只能通过lsblk查看
想要直到硬盘使用的情况,只有查看df _TH才能知道
df -TH
9、取消挂载
umount [-fn] 设备文件名或挂载点
参数:
-f:强制卸载。可用在类似网络文件系统(NFS)无法读取到的情况下。
-n:不更新/etc/mtab的情况下卸载。
umount /mnt/huihui/
umount -lf /mnt/diskl/ #强行卸载,即使目录有资源被占用,也可以卸载
10、fstab开机自动挂载
/etc/fstab文件实现开机的时候自动挂载
系统挂载的一些限制:
1、根目录是必须挂载的,而且一定要先于其他mount point被挂载进来。
2、其他挂载点必须为已新建的目录,可任意指定,但一定要遵守必需的系统目录架构原则。
3、所有挂载点在同一时间内,只能挂载一次。
4、所有分区在同一时间内,只能挂载一次。
5、若进行卸载,必须先将工作目录移到挂载点(及其子目录)之外,否则会报文件系统被占用。
blkid /dev/sdb1 #查看uuID和文件系统类型
vim /etc/fstab
参数解释:
UUID=30e35d8b-bddd-480b-a05e-a3de0f0360f1 /boot xfs defaults 0 0
/dev/mapper/centos-home /home xfs defaults 0 0
第1列:挂载设备
(1)/dev/sda5 或者
(2)UUID=设备的uuid(blkid /dev/sdb#查到设备的uuid) rhel6/7的默认写法 同一台机器内唯一的一个设备标识
第2列:挂载点 #指定要挂载到的目录,需在挂载前创建好
第3列:文件系统类型 #指定文件系统的格式,比如Ext3、Ext4、XFS、SWAP、iso9660(此为光盘设备)等
第4列:文件系统属性 #若设置为defaults,则默认权限为:rw, suid, dev, exec, auto, nouser, async
第5列:是否对文件系统进行磁带备份:0 不备份 #若为1则开机后使用dump进行磁盘备份
第6列:是否检查文件系统:0 不检查 #若为1则开机后自动进行磁盘自检
#blkid
虽然它有不少比较强大的功能,但一般只用它一个功能,就是查看器文件系统类型和UUid。
blkid #查看已经设置设备的uuid
blkid /dev/sdb #设备uuid
vim /etc/mtab #系统实时记录的挂载文件
mount -a #自动挂载 写到、etc/dstab 里面的会自动挂载不用重启
vim /etc/fstab
mount -a
etc/rc.d/rc.local开机自动挂载
这个配置文件会在永辉登录之前读取,这个文件中写入了什么命令。在每次系统启动时都会执行一次。也就是说,如果有任何需要在系统日志系统启动运行的工作。则只需写入 /etc/rc.d/rc.local配置文件即可
vim /etc/rc.d/rc.local #将挂载命令直接写入到文件中
chmod +x /etc/rc.d/rc.local #添加执行权限
reboot
11、磁盘检查:fsck
fsck [-ny] 设备名称
参数:
-n:检查文件系统。
fsck -n /dev/sda
-y:自动修复检查到的有问题的扇区。
#注意:
1、通常只有在root用户下且文件系统可能有问题的时候才使用这个命令,否则正常状况下使用此命令,可能会对系统造成损害。
2、被检查的分区务必不可挂载到系统上,需要在卸载状态下执行。
快速创建文件系统
有时候仅仅为了实验而插入新磁盘、扫描SCSI设备、再分区、格式化,整个过程挺麻烦的。好在,有更为便捷的方式:
dd if=/dev/zero of=sdx bs=1M count=32
mke2fs sdx
现在sdx文件就是一个ext家族的文件系统了,相当于已经格式化的/dev/sdxN,它可以直接拿来挂载使用。
mount sdx /mnt/sdx
还可以使用mkisofs命令工具快速将目录创建成一个可挂载的镜像文件:
mkdir -p foo/bar/baz
mkisofs -o test.iso foo # 将foo打包成iso镜像
现在,test.iso镜像文件也可以直接挂载使用:
mount test.iso /mnt/test
文件系统
一、文件系统分类
1.1分类
分类:
本地文件系统,不能在网络上用。
ntfs xfs ext2,ext3,ext4
网络文件系统,也可以在本地用。
nfs glusterfs hdfs ceph
1.2概念
作用:
管理文件的一套系统。
文件的编辑,拷贝,粘贴,移动。
node :inode块。专门存储inode信息。里面是文件的属性,权限,访问时间
理解inode
理解inode,要从文件储存说起。
文件储存在硬盘上,硬盘的最小存储单位叫做"扇区"(Sector)。每个扇区储存512字节(相当于0.5KB)。
操作系统读取硬盘的时候,不会一个个扇区地读取,这样效率太低,而是一次性连续读取多个扇区,即一次性读取一个"块"(block)。这种由多个扇区组成的"块",是文件存取的最小单位。"块"的大小,最常见的是4KB,即连续八个 sector组成一个 block。
文件数据都储存在"块"中,那么很显然,我们还必须找到一个地方储存文件的元信息,比如文件的创建者、文件的创建日期、文件的大小等等。这种储存文件元信息的区域就叫做inode,中文译名为"索引节点"。索引节点编号;它是文件或目录在磁盘里的唯一标识,linux读取文件首先要读取到这个索引节点。
每一个文件都有对应的inode,里面包含了与该文件有关的一些信息。
inode的内容
文件的字节数 文件拥有者的User ID 文件的Group ID 文件的读、写、执行权限 文件的时间戳,共有三个:ctime指inode上一次变动的时间,mtime指文件内容上一次变动的时间,atime指文件上一次打开的时间。 链接数,即有多少文件名指向这个inode 文件数据block的位置
查看inode信息
[root@xiaoqiang ~]# stat /etc/hosts#详细查看
File: ‘/etc/hosts’
Size: 158 Blocks: 8 IO Block: 4096 regular file
Device: fd00h/64768d Inode: 16778306 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2020-07-28 19:11:48.781000069 +0800
Modify: 2013-06-07 22:31:32.000000000 +0800
Change: 2020-07-18 15:37:52.353025437 +0800
Birth: -
[root@xiaoqiang ~]# ls -i /etc/hosts #-i:查看inode号
16778306 /etc/hosts
1.3.EXT
EXT 家族支持度最广:
但创建文件系统(格式化)慢!
修复慢!
文件系统存储容量有限!
1.4.XFS
XFS 同样是一种日志式文件系統:
高容量,支持大存储
高性能,创建/修复文件系统快
格式化快
inode 与 block 都是系統需要用到時,才动态配置产生
LVM逻辑卷制作,扩容,删除,快照,raid5等
lvm相关的概念和机制
LVM(Logical Volume Manager)可以让分区变得弹性,可以随时随地的扩大和缩小分区大小,前提是该分区是LVM格式的。
Ivm需要使用的软件包为lvm2, 一般在CentOS发行版中都已经预安装了。
> PV(Physical Volume)即物理卷
硬盘分区后(还未格式化为文件系统)使用pvcreate命令可以将分区创建为pv,要求分区的system ID为8e,即为LVM格式的系统标识符。
> VG(Volume Group)即卷组
将多个PV组合起来,使用vgcreate命令创建成卷组,这样卷组包含了多个PV就比较大了,相当于重新整合了多个分区后得到的磁盘。虽然VG是整合 多个PV的,但是创建VG时会将VG所有的空间根据指定的PE大小划分为多个PE,在LVM模式下的存储都以PE为单元,类似于文件系统的Block»
>PE(Physical Extend)
PE是VG中的存储单元。实际存储的数据都是存储在这里面的。
>LV(Logical Volume)
VG相当于整合过的硬盘,那么LV就相当于分区,只不过该分区是通过VG来划分的。VG中有很多PE单元,可以指定将多少个PE划分给一个LV,也可 以直接指定大小(如多少兆)来划分。划分为LV之后就相当于划分了分区,只需再对LV进行格式化即可变成普通的文件系统。
通俗地讲,非LVM管理的分区步骤是将硬盘分区,然后将分区格式化为文件系统。而使用LVM,则是在硬盘分区为特定的LVM标识符的分区后将其转变 为LVM可管理的PV,其实PV仍然类似于分区,然后将几个PV整合为类似于磁盘的VG,最后划分VG为LV,此时LV就成了 LVM可管理的分区,只需再 对其格式化即可成为文件系统。
>LE(logical extent)
PE是物理存储单元,而LE则是漏记存储单元,也即为lv中的逻辑存储单元,和pe的大小是一样的。从vg中划分Iv,实际上是从vg中划分vg中的 pe,只不过划分lv后它不再称为pe,而是成为le。
能够通过LVM伸缩容量,其实现的方法就是将LV里空闲的PE移出,或向LV中添加空闲的PE。
lvm的制作(yum install -y lvm2)
第一步,拥有基本分区
做成物理卷:PV -----sdb1,sdb2 打PV的标记
PVcreate /dev/sdb
pvs #pvscan 扫描并列出所有的pv #pvdisplay 列出pv属性信息
加入卷组: vg------卷组里面包含:sdb1 sdb2,建立在pv之上
vgcreat vg1(创建卷组的名字) /dev/sdb(物理卷)
vgs #vgscan 扫描并列出所有的vg #vgdisplay 列出vg属性信息
切割逻辑卷 lv -----逻辑卷是从卷组里面拿空间出来做成的逻辑卷,再起个名,建立在VG之上
参数解释:-L 指定的大小 -n 给创建的lv起一个名字 -l 20指定pe(块) 默认4M一个块。
lvcreate -L 150M -n xiexie(创建逻辑卷的名字) vg1(卷组名)
lvcreate -l 20 -n xiexie (创建逻辑卷的名字) vg1(卷组名)
lvs #lvscan 扫描并列出所有的vg #lvdisplay 列出vg属性信息
格式化文件系统-----mkfs.xfs /dev/vg1/xiexie #lv的路径
mkfs.xfs /dev/vg1/lv1
mkfs.ext4 /dev/vg1/lv2
df -TH 查看文件系统属性,大小,使用率,挂载点。。然后挂载
mount /dev/vg1/lv1 /mnt/lv1
mount /dev/vg1/lv1 /mnt/lv1
lvm逻辑卷扩容:
1:如果vg卷容量不够则先扩容:
先扩容vg:创建新的pv pvcreate /dev/sdc ;然后直接vgextend 【扩容的vg卷组名字】 /dev/sdc;然后vgs
#如果想取消vg扩容,则:vgreduce vg(卷组名) /dev/sdc
2:如果vg卷容量充足则直接扩容lv:
再扩容LV:vgs查看;lvextend -L 250M /dev/vg1(卷组)/lv1(逻辑卷名) 250M表示这个lvm扩容到250M
lvextend -L +250M /dev//lv1 #在原有的基础上加250M
lvextend -l +15 /dev/vg1/lv1 #在原来有的基础上加15个pe,默认一个块4M
最后: #lvs lvscan display
FS文件系统扩容:扩容后要修改文件系统属性,否则文件无法识别
df -TH 查看文件系统属性和扩容后是否修改了
则:
xfs_growfs /de
v/vg1/xiexie #xfx扩容
resize2fs /dev/vg1/xiexie #ext4扩容 vg卷组名 LV逻辑卷名
最后:df -TH 查看刷新容量是否扩容成功
重新挂载硬盘设备并查看挂载状态。
mount -a
df -h
lvm逻辑卷快照:
LVM还具备有“快照卷”功能,该功能类似于虚拟机软件的还原时间点功能。例如,可以对某一个逻辑卷设备做一次快照,如果日后发现数据被改错了,就可以利用之前做好的快照卷进行覆盖还原。LVM的快照卷功能有两个特点:
#快照卷的容量必须等同于逻辑卷的容量;
#快照卷仅一次有效,一旦执行还原操作后则会被立即自动删除。
-s 关键选项,创建快照snap****的意思
-L -l后面跟快照包含多少个PE****的数量
-n 后面跟创建的快照的名字
1:vgdisplay #首先查看卷组的信息,是否足够创建lvm快照
2:lvdisplay #其次查看你要快照的逻辑卷的大小
3:lvcreate -s -L 100 -n mykuaizhao /dev/myvg/mylv#这里快照的大小需要结合查看到的pe大小
1:在校验快照卷的效果,首先通过vgdisplay卷组输出的信息可以看到使用的容量。接下来用重定向往逻辑卷设备所挂载的目录中写入一个文件。
echo "Welcome to shejianshang de yunjisuan" > /linuxkuaizhao/xiexie.txt或
dd if=/dev/zero of=/linuxkuaizhao/qiangqiang count=1 bs=100M:
2:最后对逻辑卷进行快照还原操作。(在此之前记得先卸载掉逻辑卷设备与目录的挂载)
#umount /linuxkuaizhao
lvconvert --merge /dev/myvg/mykuaizhao
3:执行上面的还原快照后快照卷会被自动删除,并且刚刚在逻辑卷设备被执行快照操作后再创建出来的100MB的垃圾文件也被清除了。
mount -a
ls /linuxkuaizhao
删除逻辑卷:
当生产环境中想要重新部署LVM或者不再需要使用LVM时,则需要执行LVM的删除操作。为此,需要提前备份好重要的数据信息,然后依次删除逻辑卷、卷组、物理卷设备,这个顺序不可颠倒。
第1步:取消逻辑卷与目录的挂载关联,删除配置文件中永久生效的设备参数。
#umount /opt
#vim /etc/fstab
第2步:删除逻辑卷设备,需要输入y来确认操作。
#lvremove /dev/vg/lv
第3步:删除卷组,此处只写卷组名称即可,不需要设备的绝对路径。
#vgremove vg
第4步:删除物理卷设备。
#pvremove /dev/sdb /dev/sdc
交换分区:swap
交换分区管理swap--也叫虚拟内存,作用提升内存的容量,防止oom(out of memory)
现象是当内存不够的时候内核会随机杀死进程,它认为占用内存多的进程。(内核会先删除占用内存多的进程).
如何制作交换分区?
#我们可以将硬盘空间拿来当作内存来用
什么时候用到交换分区?
#当物理内存不够用的时候使用swap分区,防止物理内存耗尽
查看当前的交换分区:free -m ; swapon -s 查看交换分区信息
增加交换分区,可以是基本分区lvm, file两种:
lvm:
1:在一个磁盘分一个主分区出来 fdisk /dev/sdd
刷新分区表:partprobe /dev/sdd
ll /dev/sdd* #查看以sdd磁盘的所有分区
初始化:mkswap /dev/sdd1
查看uuid:blkid /dev/sdd1 #查看这个分区的uuid
开机挂载:vim /etc/fstab
1:/dev/sdd1 swap swap defaults 0 0 或 UUID: swap swap defaults 0 0
激活sqap分区(读取/etc/fstab):swapon -a
查看交换分区:swapon -s
关闭swap分区:swapoff /dev/sdd1
file:
dd 命令的基本格式如下:
# dd if="输入文件" of="输出文件" bs="数据块" count="数量"
m
2:dd if=/dev/zero of=/swap2.img(自己创建的目录) bs=1M count=512
解释:dd 读入从空设备里面拿空快 到交换分区 块多大 一共多少兆
初始化:mkswap /swap2.img
查看uuid:blkid /dev/sdd1 #查看这个分区的uuid
开机挂载:vim /etc/fstab
1:/dev/sdd1 swap swap defaults 0 0 或 UUID: wap swap defaults 0 0
交换分区权限需要设置为600,默认644权限不安全
激活sqap分区(读取/etc/fstab):swapon -a
查看交换分区:swapon -s
关闭swap分区:swapoff /dev/sdd1
raid–磁盘阵列
1、RAID介绍
RAID ( Redundant Array of Independent Disks )即独立磁盘冗余阵列,通常简称为磁盘阵列。简单地说, RAID 是由多个独立的高性能磁盘驱动器组成的磁盘子系统,从而提供比单个磁盘更高的存储性能和数据冗余的技术。
概念
1、镜像( Mirroring ):镜像是一种冗余技术,为磁盘提供保护功能,防止磁盘发生故障而造成数据丢失。对于 RAID 而言,采用镜像技术会同时在阵列中产生两个完全相同的数据副本,分布在两个不同的磁盘驱动器组上。镜像提供了完全的数据冗余能力,当一个数据副本失效不可用时,外部系统仍可正常访问另一副本,不会对应用系统运行和性能产生影响。而且,镜像不需要额外的计算和校验,故障修复非常快,直接复制即可。
2、数据条带( Data Stripping ):磁盘存储的性能瓶颈在于磁头寻道定位,它是一种慢速机械运动,无法与高速的 CPU 匹配。再者,单个磁盘驱动器性能存在物理极限, I/O 性能非常有限。 RAID 由多块磁盘组成,数据条带技术将数据以块的方式分布存储在多个磁盘中,从而可以对数据进行并发处理。这样写入和读取数据就可以在多个磁盘上同时进行,有效提高了整体 I/O 性能,而且具有良好的线性扩展性。
3、数据校验( Data parity ):镜像具有高安全性、高读性能,但冗余开销太昂贵。数据条带通过并发性来大幅提高性能,然而对数据安全性、可靠性未作考虑。数据校验是一种冗余技术,它用校验数据来提供数据的安全,可以检测数据错误,并在能力允许的前提下进行数据重构。
#注意
#所有服务器在安装操作系统之前必须先做raid【常识】
作用
为什么要做raid? #为了保证数据完整性,防止数据丢失
最常用的raid级别:0、1、5、6、10:10是 1和0 的组合
yum install -y mdadm
raid0 ---数据条带卷
raid0把连续的数据分散到多个磁盘上存取,系统有数据请求就可以被多个磁盘并行的执行,每个磁盘执行属于它自己的那部分数据请求。
最少需要两块磁盘,分别往每一块磁盘上写一部分数据
优点:
1.读写速度快,
2.磁盘利用率:100%
缺点:不提供数据冗余,无数据检验,不能保证数据的正确性,存在单点故障。
应用场景:
1)对数据完整性要求不高的场景,如:日志存储,个人娱乐
2)要求读写效率高,安全性能要求不高,如图像工作站
============================================================================
raid1 又叫镜像raid,通过磁盘数据镜像实现数据冗余,在成对的独立磁盘上产生互为备份的数据。当原始数据繁忙时,可直接从镜像拷贝中读取数据。一般需要两块磁盘,每块磁盘上都会存储一份完整数据。其数据安全性就会较高,但是磁盘空间利用率是比较低的。
优点:提供数据冗余,数据双倍存储安全性高支持容错。读速度快
缺点:写速度慢,无数据校验。磁盘利用率不高
磁盘利用率:50%
应用场景:
存放重要数据,如数据存储领域
===========================================================
raid5:RAID5应该是目前最常见的 RAID 等级,它的校验数据分布在阵列中的所有磁盘上。RAID5的磁盘上同时存储数据和校验数据,数据快和对应的校验信息存保存在不同的磁盘上,当一个数据盘损坏时,系统可以根据同一条带的其他数据块和对应的校验数据来重建损坏的数据。
raid5最少需要3块磁盘。
优点:
1.可以找回丢失的数据---数据可以通过校验计算得出,
2.冗余磁盘-->(需要4快磁盘将其中一块做热备)当某一块磁盘坏掉后,冗余磁盘会自动替换上去
3.有校验机制
4.读写速度高
5.磁盘利用率高
缺点:
1.磁盘越多安全性能越差
(n-1)/n
应用场景:安全性高,如金融、数据库、存储等。
==================================================
raid6:RAID6 等级是在 RAID5 的基础上为了进一步增强数据保护而设计的一种 RAID 方式,它可以看作是一种扩展的 RAID5 等级。
最少需要四块磁盘,两块存校验位。RAID6引入双重校验的概念,它可以保护阵列中同时出现两个磁盘失效时,阵列仍能够继续工作,不会发生数据丢失。
优点:
1.容错:允许两块磁盘同时坏掉。读写快。
2.良好的随机读性能
3.有校验机制
缺点:
1.写入速度差
2.成本高
应用场景:对数据安全级别要求比较高的企业
===============================================
RAID10:先做镜像再作条带化--也叫混合raid
优点:
1.RAID10的读性能将优于RAID01
2.较高的IO性能
3.有数据冗余
4.无单点故障
5.安全性能高
缺点:成本稍高
应用场景:
特别适用于既有大量数据需要存取,同时又对数据安全性要求严格的领域,如银行、金融、商业超市、仓储库房、各种档案管理等。
=======================================================
购买磁盘后需要操作
# 1.有磁盘,2.制作read5,3.开始分区,4.刷新分区表,5,制作文件系统,6.挂载。
RAID5(3块硬盘)+热备(1块硬盘)
一:没lvm逻辑卷
1:准备4块硬盘
ll /dev/sd*
2:对磁盘进行分区:fdisk -l查看分区情况,raid组需要每一个分区大小一致
3:创建RAID5(yum install -y mdadm)
mdadm -C /dev/md0(创建的名字) -x1 -n3 -l5 /dev/sd{a,s,d,f}
注:-l RAID级别,这里为5,即RAID5 -n RAID组中硬盘数量,这里有3块 -x 热备盘数量,这量设置为1块 /dev/sdb[1-4] 使用的是哪些硬盘,这里使用/dev/sdb1~/dev/sdb4一共四个硬盘(3块建RAID5,1块用于热备)。
#2>将RAID配置信息写入到配置文件
Mdadm --detail --scan --verbose /dev/md0 > /etc/mdadm.conf
注:Linux启动时会自动读取/etc/mdadm.conf,对raid组进行配置。
3>查看RAID信息
a.查看RAID组的详细信息
mdadm --detail /dev/md0
b.查看RAID组的状态信息
cat /proc/mdstat
#mdadm -D /dev/mdO查看信息
4:格式化,挂载
#mkfs.ext4 /dev/md0
#vim /ect/fstab
blkid /dev/md0 查看设备uuid
#mount -a
或者:mount /dev/md0 /opt
4:df -TH
二:有lvm逻辑卷
1:准备4块硬盘
ll /dev/sd*
2:创建RAID5(yum install -y mdadm)
mdadm -C /dev/md0(创建的名字) -x1 -n3 -l5 /dev/sd{a,s,d,f}
3:创建Pv,vg,lv
pvcreate /dev/md0
vgcreate xiexie /dev/md0
lvcreate -L 50M -n qiangqiang /dev/xiexie
4:格式化和挂载
mkfs.xfs /dev/xiexie/qiangqiang
mkfs.ext4 /dev/xiexie/qiangqiang
#vi /etc/fstab
blkid /dev/xiexie/qiangqiang
mount -a
5:df -TH
查看raid信息:mdadm -D /dev/md0
模拟一块硬盘损坏并移除
终端一:watch -n 0.5 'mdadm -D /dev/md0 | tail' //watch持续查看
终端二:mdadm /dev/md0 -f /dev/sde -r /dev/sde //模拟坏了并移除 -f --fail -r --remove
通过manage模式可以模拟阵列中的设备损坏。
mdadm --manage /dev/md[0-9] [—add 设备名][—remove 设备名][—fail 设备名] 选项说明:
manage : mdadm 使用 manage 模式,此模式下可以做一add/—remove/—fail/―replace 动作 —add :将后面列出的设备加入到这个md
—remove :将后面列出的设备从md中移除
-fail :将后面列出的设备设定为错误状态,即人为损坏
设置RAID开机生效:
mdadm -D -s
mdadm选项:
-s --scan
-S --stop
-D --detail
mdadm -D /dev/mdO
-C --create
-f --fail 模拟损坏
-r --remove 拔出硬盘
-a 插回硬盘
-n --raid-devices=3
-x --spare-devices=1
-l --level=5
raid5 删除操作
1、卸载raid挂载
umount /dev/md0
2、停止raid
mdadm -S /dev/md0
3、删除raid卷
mdadm --misc --zero-superblock /dev/sd{b,c,d,e}
#mdadm —manage Zdev/mnO -add Zdev/sdd 再修复时将新磁盘加入到raid中。