Linux中设备管理(一):设备使用,磁盘分区,磁盘阵列
1.设备使用,挂载与卸载
- 设备查看
1.1 fdisk -l查看真实存在的设备
[root@localhost ~]
Disk /dev/vda:
10.7 GB,
10737418240 bytes,
20971520 sectors
Units = sectors
of 1 *
512 =
512 bytes
Sector size (logical/physical):
512 bytes /
512 bytes
I/O size (minimum/optimal):
512 bytes /
512 bytes
Disk label type: dos
Disk identifier:
0x00013f3e
Device Boot Start End Blocks Id System
/dev/vda1 *
2048 20970332 10484142+
83 Linux
Disk /dev/vdb:
10.7 GB,
10737418240 bytes,
20971520 sectors
Units = sectors
of 1 *
512 =
512 bytes
Sector size (logical/physical):
512 bytes /
512 bytes
I/O size (minimum/optimal):
512 bytes /
512 bytes
其中会显示设备的类型,大小类型,标示等
运行结果如下:
注:系统识别与真实存在不同
1.2cat /proc/partitions 系统可识别的设备
[root
@localhost ~]
运行结果如下:
1.3blkid 系统真实可用的设备
[root
@localhost ~]
运行结果如下:
1.4df 系统正在使用的设备
[root
@localhost ~]
df -h
df -
H
运行结果如下: - df - df -h - df -H
一般来说df -h 统计的比df -H统计出来的情况小且准确
注:可看到的设备数量df <= blkid <= cat /proc/artitions <= fdisk -l
- 挂载设备
mount可以看到系统下所有设备挂载情况
mount +设备名称+ 挂载位置
mount -o +参数 对挂载设备进行权限选择
ro 只读
rw 读写
umount +设备名称/挂在位置
示例1:
mount /dev/sdb1 /mnt
运行结果如下:
示例2:
[root
@localhost ~]
注:若设备被占用 可用fuser -vm 查看程序 可用kill -9+进程id结束进程进行卸载, 还可用fuser -kvm直接结束,后进行卸载
mount
-o ro /dev/vdb1 /mnt
#ro 只读挂载
运行结果如下: 由上可知无法对磁盘进行写入操作
mount
-o remount,rw /dev/sdb1
#remoumt 重新挂载,rw 进行读写挂载
运行结果如下:
2.系统分区
2.1介绍一下硬盘的基本管理结构:
硬盘由系统管理,硬盘用来保存系统,系统安装在硬盘上; 硬盘的分区信息由分区表保存,分区表,磁盘的主动标识与主引导程序储存在上硬盘最外一圈0磁道上,大小为512字节
- mbr:
MBR的意思是“主引导记录”,最早在1983年在IBM PC DOS 2.0中提出。之所以叫“主引导记录”,是因为它是存在于驱动器开始部分的一个特殊的启动扇区。这个扇区包含了已安装的操作系统的启动加载器和驱动器的逻辑分区信息。所谓启动加载器,是一小段代码,用于加载驱动器上其他分区上更大的加载器。如果你安装了Windows,Windows启动加载器的初始信息就放在这个区域里——如果MBR的信息被覆盖导致Windows不能启动,你就需要使用Windows的MBR修复功能来使其恢复正常。如果你安装了Linux,则位于MBR里的通常会是GRUB加载器 MBR支持最大2TB磁盘,它无法处理大于2TB容量的磁盘。MBR还只支持最多4个主分区——如果你想要更多分区,你需要创建所谓“扩展分区”,并在其中创建逻辑分区。主引导程序mbr:所占大小446字节, 剩下512-446=64+2 字节 64—>mpt 磁盘主分区表 2—>55aa硬盘的主动标识
2.2分区管理
2.2.1 mbr分区
[root@localhost ~]
Welcome
to fdisk (util-linux
2.23.2).
Changes will remain
in memory only,
until you decide
to write them.
Be careful
before using
the write command.
Command (m
for help): m
Command action
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)
Command (m
for help): n
Partition type:
p primary (
1 primary,
0 extended,
3 free)
e extended
Select (default p): p
Partition
number (
2-
4, default
2):
2
First sector (
206848-
20971519, default
206848):
Using default value
206848
Last sector, +sectors
or +size{K,M,G} (
206848-
20971519, default
20971519): +
100M
Partition
2 of type Linux
and of size
100 MiB
is set
Command (m
for help): p
Disk /dev/vdb:
10.7 GB,
10737418240 bytes,
20971520 sectors
Units = sectors
of 1 *
512 =
512 bytes
Sector size (logical/physical):
512 bytes /
512 bytes
I/O size (minimum/optimal):
512 bytes /
512 bytes
Disk label type: dos
Disk identifier:
0xca64b62a
Device Boot Start End Blocks Id System
/dev/vdb1
2048 206847 102400 83 Linux
/dev/vdb2
206848 411647 102400 83 Linux
Command (m
for help): wq
执行完毕后,可通过cat /proc/partitions 来查看分区是否成功被系统识别,若无,可通过执行:partprobe 手动同步分区表
查看分区是否被系统识别:cat /
proc/partitions
手动同步分区表:partprobe
注:分区后是无法对分区直接进行操作的,需要安装文件系统
如:未进行文件系统添加直接对分区进行挂载操作 执行:
[root
@localhost ~]
运行结果如下:无法进行挂载 可通过执行:
mkfs
.xfs /dev/vdb2
格式化分区,也就是添加文件系统 运行结果如下: 进行挂载看是否可用:
若想删除传创建的分区可进行以下操作 -通过fdisk /dev/vdb将已存在分区删除
2.2.2 gpt 分区
上面的mbr分区仅能进行4个主分区的分割,或是通过添加额外分区,进行逻辑分区的添加,但是若是额外分区被损坏,逻辑分区中的内容也随之会被损坏。
这时候就需要才采用gpt分区类型了
- GPT
GPT意为GUID分区表。(GUID意为全局唯一标识符)。这是一个正逐渐取代MBR的新标准。它和UEFI相辅相成——UEFI用于取代老旧的BIOS,而GPT则取代老旧的MBR。之所以叫作“GUID分区表”,是因为你的驱动器上的每个分区都有一个全局唯一的标识符(globally unique identifier,GUID)——这是一个随机生成的字符串,可以保证为地球上的每一个GPT分区都分配完全唯一的标识符。 这个标准没有MBR的那些限制。磁盘驱动器容量可以大得多,大到操作系统和文件系统都没法支持。它同时还支持几乎无限个分区数量,限制只在于操作系统——Windows支持最多128个GPT分区,而且你还不需要创建扩展分区。
可通过:parted /dev/vdb 来改变当前分区方式
[root@localhost ~]
GNU Parted
3.1
Using /dev/vdb
Welcome
to GNU Parted! Type 'help'
to view a
list of commands.
(parted) mklabel
New disk label type? gpt
Warning: The existing disk label
on /dev/vdb will be destroyed
and all data
on
this disk will be lost. Do you want
to continue?
Yes/No? YES
(parted) quit
之后再进行分区划分与mbr相同 更改类型:
创建新分区: 建立完查看分区表:
2.2.3 开机自动挂载
对系统进修行分区后通过挂载应用磁盘,为了在重启机器后还能继续使用可编辑/etc/fstab文件执行开机自动挂载
[root
@localhost ~]
编辑内容如下:
/dev/vdb1 /mnt xfs
default 0 0
设备 挂载点 挂载类型 参数
fstab 第五列是表示dump选项,dump工具通过这个选项位置上的数字来决定文件系统 是否需要备份。如果是0,dump就会被忽略,事实上,大多数的dump设置都是0。 第六列是fsck选项,fsck命令通过检测该字段来决定文件系统通过什么顺序来扫描检查 ,根文件系统/对应该字段的值应该为1,其他文件系统应该为2。若文件系统无需在 启动时扫描检查,则设置该字段为0。 注:不知道格式可以man 5 fstab
执行mount -a 后就会开机自动挂载
2.2.4 swap分区
Swap分区 在系统的物理内存不够用的时候,把物理内存中的一部分空间释放出来,以供当前运行的程序使用。那些被释放的空间可能来自一些很长时间没有什么操作的程序,这些被释放的空间被临时保存到Swap分区中,等到那些程序要运行时,再从Swap分区中恢复保存的数据到内存中
(1)建立新分区,用来作为swap分区
[root@localhost ~]# fdisk /dev/vdb
Welcome
to fdisk (util-linux
2.23.2).
Changes will remain
in memory only,
until you decide
to write them.
Be careful before using the write command.
Command (m
for help): n
Partition
type:
p primary (
0 primary,
0 extended,
4 free)
e extended
此处略去创建过程
Device Boot Start
End Blocks Id System
/dev/vdb1
2048 206847 102400 83 Linux
Command (m
for help): t
Selected partition
1 #选择分区
1
Hex code (
type L
to list
all codes):
82 #选择分区id (若不知如何选择,可执行l 列出所有类型的id)
Changed
type of partition
'Linux'
to 'Linux swap / Solaris'
Command (m
for help): p
Disk /dev/vdb:
10.7 GB,
10737418240 bytes,
20971520 sectors
Units = sectors
of 1 *
512 =
512 bytes
Sector size (logical/physical):
512 bytes /
512 bytes
I/O size (minimum/optimal):
512 bytes /
512 bytes
Disk
label type: dos
Disk identifier:
0x00067ce5
Device Boot Start
End Blocks Id System
/dev/vdb1
2048 206847 102400 82 Linux swap / Solaris
Command (m
for help): wq
最终结果配图: 创建完成后 执行:cat /proc/partitions 查看是否被系统识别 若没有,执行:partprobe 手动同步
完成上上述操作后,通过执行mksawp 命令来进行swap分区的最终创建
mkswap /dev/vdb1
swapon
-a /dev/vdb1
swapon
-s
运行结果如下:
上述swap在重启机器后会被系统回收
可通过编辑/etc/fstab 进行永久的swap分区添加
/dev/vdb1
swap swap defaults
0 0
swap不需挂载 分区类型
注:若要删除swap分区 1.修改配置文件(/etc/fstab)将关于swap的删除 2.执行 swapoff /dev/vdb1 将swap分区去掉 f.disk /dev/vdb d删除分区 4.partprobe 手动更新分区列表
运行结果如下: 删除后同步分区表
cryptsetup luksFormat #进行luks加密
cryptsetup open
<设备> [--type
<type>] [
<name>] - open device as mapping
<名称>
建立一个指定名称的文件作为该设备的代表
文件在/dev/mapper/下
cryptsetup close
<名称> - close device (remove mapping)
关闭对应文件,在下次启用时再打开。
注:luks加密必须在新建分区下进行
具体执行如下:
通过 fdisk /dev/vdb建立新的分区 通过cryptsetup lucksFormat /dev/vdb1 进行加密
[root@localhost ~]# cryptsetup luksFormat /dev/vdb1
This will overwrite data on /dev/vdb1 irrevocably.
Are you sure? (Type uppercase yes): YES #此处必须为大写YES
Enter passphrase: #输入密码
Verify passphrase: #确认密码
#密码必须超过8位不能过于简单
此时仅加密成功,还不能对分区进行应用
需要执行以下操作对分区进行调用
[root
@localhost ~]
Enter passphrase
for /dev/
vdb1:
[root
@localhost ~]
control myvdb1
运行如下:
调用成功,对此文件“mycdb1”进行格式化分区,也就是添加文件系统
执行:
[root
@localhost ~]
[root
@localhost ~]
[root
@localhost ~]
运行结果如下:
格式化分区
挂载,查看
想停止使用加密分区可以通过执行cryptsetup close myvdb1来进行关闭
关闭时必须保证myvdb1不被占用否则会报错,示例如下:
解除占用后执行就可关闭,想要再次使用再执行open即可
示例:
为了防止每次调用都要进行打开指令,可让设备在开机时自己启动。
编辑文件执行开机自动挂载
[root
@localhost ~]
[root
@localhost ~]
[root
@localhost ~]
-rw-------.
1 root root
9 May 3 05:54 /root/lukskey
[root
@localhost ~]
Enter any
passphrase:
编辑文件进行开机自动:
[root
@localhost ~]
内容:myvdb1 /dev/vdb1 /root/lukskey
[root
@localhost ~]
内容:
/dev/mapper/myvdb1 /mnt xfs defaults
0 0
运行如下:
建立钥匙文件,并与设备建立连接
编辑文件实现自启
/etc/crypttab: /etc/fstab: 重启系统后就会看到效果
注:系统启动的开机运行记录文件: cat /var/log/boot.log
附:删除加密磁盘
删除luksFormat 清除所有建立与修改
1.清除
/etc/fstab 内编辑的内容;
2.清除
/etc/crypttab内编辑的内容;
3.删除
/root/lukskey 钥匙;
4.关闭
myvdb1:cryptsetup close myvdb;
5.格式化磁盘分区:mkfs.xfs /dev/vdb2。
2.2.5 磁盘阵列
- 磁盘阵列
磁盘阵列英文名全称Redundantarrays of inexpensive Disks(RAID),即容错廉价磁盘阵列。RAID可以通过一些技术(软件或者硬件)将多个较小的磁盘整合成为一个较大的磁盘设备;而这个较大的磁盘功能不仅仅是用户存储,他还具有数据保护功能。整个RAID由于选择的等级不同,而使得整合后的磁盘具有不同的功能。常见的等级有以下几种:
RAID-0(等量模式):性能最佳 使用相同的磁盘来组成在组成RAID-0。在组成RAID-0时,每块磁盘都会被事先隔成小区块。当有数据要写入时,数据会先被分割成符合小区块大小,然后再依序一个个放到不同磁盘中。每块瓷盘负责的数据量都降低了,效率提高。 但相应的RAID-0只要有任何一块磁盘损毁,在RAID上面的所有数据都会因丢失而无法读取,安全性差。RAID-1(映像模式):完成备份 RAID-1需要容量相等的磁盘,最好是一模一样的,因为RAID-1遵循木桶原则,总容量以容量最小的一块为主。此模式让同一份数据完整保存在两块磁盘上面,即当数据写入时若有两块磁盘,数据将会同时存储到两块硬盘中。 RAID-1的最大优点就是在于数据的备份。不过由于磁盘容量有一半用在备份,因此容量会是全部磁盘容量的一般。RAID-5性能与数据备份的均衡考虑 RAID-5至少需要三块以上的磁盘才能组成。此磁盘阵列的数据写入有点类似于RAID-0,不过每个循环写入过程中,在每块磁盘中还加入一个同位检查数据(Parity),这个数据会记录其它磁盘的备份数据,用于当有磁盘损坏时的救援。
制作raid设备(用一块硬盘进行模拟制作)
1.fdisk /dev/vdb (1)新建三个分区vdb1,vdb2,vdb3 (2)赋予1G容量, (3)类型改为 :Linux raid autodetect(fd) 2 mdadm -C /dev/md0 -a yes -l 1 -n 2 -x 1 /dev/vdb{1..3} 通过man mdadm查看参数含义 3.mkfs.xfs /dev/md0 #格式化 4.mount /dev/md0 /mnt #对设备进行挂载使用
具体操作如下: 建立新分区并更改分区id,结果如下:  后执行如下命令:
[root@localhost ~]# mdadm -C /dev/md0 -a yes -l 1 -n 2 -x 1 /dev/vdb{1..3}
-
C:新建RAID
-
a yes:确认建立并确定后面接的磁盘阵列/dev/vdb{1..3}
-
l:磁盘阵列的等级
-
n:指定阵列中活动设备的数量
-
x:指定阵列中空闲设备的数量
mdadm: Note: this array has metadata at the start and ~~~~~
Continue creating array? y #是否确定创建
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md0 started. 运行结果如下: 
[root
@localhost ~] 运行结果如下: 
[root
@localhost ~]
[root
@localhost ~]
/dev/md
0 1021M
33M
988M
4%
/mnt 运行结果如下: 
可通过对/proc/mdstat里的内容进行监控来观查raid设备
[root
@localhost ~] 
当组成raid的硬盘出现错误或需要更换组成raid的硬盘时,可进行如下操作
对设备进行添加删除: 首先观察设备状态:
[root@localhost ~]
/dev/md0:
Version :
1.2
Creation Time : Thu May
3 07:
07:
14 2018
Raid Level : raid1
Array Size :
1048000 (
1023.61 MiB
1073.15 MB)
Used Dev Size :
1048000 (
1023.61 MiB
1073.15 MB)
Raid Devices :
2
Total Devices :
3
Persistence : Superblock
is persistent
Update Time : Thu May
3 07:
08:
09 2018
State : clean
Active Devices :
2
Working Devices :
3
Failed Devices :
0
Spare Devices :
1
Name : localhost:
0 (
local to host localhost)
UUID : a1aece77:
6b95a989:
4824f019:e1530fd2
Events :
17
Number Major Minor RaidDevice State
0 253 17 0 active sync /dev/vdb1
1 253 18 1 active sync /dev/vdb2
2 253 19 - spare /dev/vdb3
通过上述观察,可看到raid的工作状态,和组成raid个设备的工作状态
注:三个设备构成raid的意义是,在一个设备损坏时,另一个设备无缝过渡,顶替上一个设备继续工作
下面是对设备的删除添加:
mdadm /dev/md0 -r /dev/vdb1
mdadm /dev/md0
-f /dev/vdb1
mdadm /dev/md0
-a /dev/vdb1
运行结果如下:
摧毁vdb1
用 mdadm -D /dev/md0查看raid状态
从raid中移除vdb1
用 mdadm -D /dev/md0查看raid状态
将vdb1添加到raid中
用 mdadm -D /dev/md0查看raid状态’
删除raid
mdadm -S /dev/md0
mdadm -D /dev/md0
fdisk /dev/vdb
partprobe
运行如下: 之后再进行各分区删除