存储管理之传统磁盘管理
""" -- 对磁盘进行分区并查看磁盘有哪些分区 -- """
fdisk /dev/sdb # -- 以MBR格式对某个磁盘进行分区
gdisk /dev/sdd # -- 以GPT格式对某个磁盘进行分区
partprobe # -- 及时更新磁盘分区后的分区表信息!!
lsblk # -- 查看所有磁盘分区情况
ls /dev/sdb 连续按两下Tab键!! # -- 查看某一磁盘下有哪些分区
# -- 查看某个磁盘分区情况
lsblk /dev/sda
fdisk /dev/sdb 进去后 输入p
fdisk -l /dev/sdb
gdisk -l /dev/sdd
""" -- 格式化分区并挂载(临时、永久) -- """
mkfs.xfs /dev/sdb1 # -- 格式化某个分区
mount /dev/sdb1 /a # -- 将某个分区进行临时挂载
blkid # -- 查看每个分区的UUID
vim /etc/fstab # -- 设置开机自动挂载
sed -i '$a /dev/sdb3 /opt xfs defaults 0 0' /etc/fstab
mount -a # -- 不reboot重启机器,使配置文件/etc/fstab生效
# 前提: 分区对应的挂载参数设置为defaults或者多个挂载参数中包含auto
df # -- 查看已经挂载磁盘的使用情况
mount | grep sdb # -- 最准确的显示是否挂载成功
""" -- 制作swap分区并激活 -- """
mkswap /dev/sdd3
swapon /dev/sdd3 # -- 激活/临时挂载swap分区
swapon -s # -- 查看有哪些挂载的swap分区
swapoff -a # -- 关闭所有swap分区
swapoff /dev/sdd3 # -- 关闭某个swap分区
free -m # -- 查看虚拟内存情况
vim /etc/fstab # -- 开机自动挂载新增的swap分区 临时 + 开机挂载 = 永久
sed -i '$a /dev/sdd3 swap swap defaults 0 0' /etc/fstab
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
# 磁盘分区
回顾详见: 0_计算机基础/1_计算机硬件组成.md 中 存储器详解 这一部分的内容...
lsblk /dev/sda
## -- 在vm虚拟机里可以直接添加多个硬盘
## -- 这里我添加了 sdb sdc sdd三块硬盘(都是SCSI接口 容量分别为20G、20G、2500G/2.5TB)
[root@localhost ~]# ls /dev | grep sd
sda ## -- 第一块物理磁盘
sda1 ## -- 第一块物理磁盘第一分区
sda2 ## -- 第一块物理磁盘第二分区
sdb ## -- 第二块物理磁盘
sdc ## -- 第三块物理磁盘
sdd ## -- 第四块物理磁盘
## Ps: vde4 第五块虚拟磁盘的第四分区
## -- 查看磁盘设备详情,以及分区情况
"""
TYPE
disk 磁盘
part 分区
rom 只读
"""
[root@localhost ~]# lsblk /dev/sda
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 20G 0 disk
├─sda1 8:1 0 1G 0 part /boot
└─sda2 8:2 0 19G 0 part
├─centos-root 253:0 0 17G 0 lvm /
└─centos-swap 253:1 0 2G 0 lvm [SWAP]
[root@localhost ~]# lsblk /dev/sdb
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sdb 8:16 0 20G 0 disk
[root@localhost ~]# lsblk /dev/sdc
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sdc 8:32 0 20G 0 disk
[root@localhost ~]# lsblk /dev/sdd
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sdd 8:48 0 2.5T 0 disk
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
某个磁盘划分的分区主要分为三类:
主分区/引导分区 、 扩展分区 -- 包含-- 逻辑分区
主分区/引导分区: 包含主引导记录MBR的分区,意味着可以安装系统(MBR里有OS的启动程序grub)
Ps: 相关知识点翻阅 0_计算机基础/1_计算机硬件组成.md 中 计算机启动过程 以及 1_linux基础/0_准备工作.md Linux启动流程 这两部分内容...
常见的磁盘分区方案有两种: MBR分区表和GUID分区表(简称GPT)
MBR -- 最多能识别 2TB 的容量 ; 最多只能支持4个主分区 or 3个主分区+1个扩展分区(逻辑分区不限制)
GPT -- 支持的磁盘容量比 MBR 大得多,最多支持128个主分区
我们拿到一块没有分区的新硬盘, 首先将硬盘划分出n个主分区(MBR方案通常是3个), 再将硬盘剩余空间给扩展分区, 然后将扩展分区划分为若干个逻辑分区,具体的细节操作后文会详细阐述..
磁盘分区的工具
fdisk 工具 -- MBR
gdisk 工具 -- GPT
磁盘容量小于2TB的通常用MBR, GPT当然也可以,但存着效率的问题...
# MBR进行分区
fdisk /dev/sdb
m 查看帮助
q 退出, 未w保存的分区信息不会写入磁盘,不会生效
n 新建分区(p 主分区;e 扩展分区)
d 删除分区
p 查看磁盘已划分分区的信息
w 保存
★ 创建3个大小为1G的主分区,剩余容量给扩展分区,扩展分区里划分出了两个逻辑分区,一个为2G,另一个为3G..
中途还验证了,MBR的方案新建四个主分区后,不能再新建任何分区..
[root@localhost ~]# fdisk /dev/sdb
欢迎使用 fdisk (util-linux 2.23.2)。
... ... ...
""" -- 新建第一个主分区分区(1G) -- """
命令(输入 m 获取帮助): n ## -- 新建分区
Partition type:
p primary (0 primary, 0 extended, 4 free) ## -- 主分区
e extended ## -- 扩展分区
Select (default p): p ## -- 选择新建主分区
分区号 (1-4,默认 1): ## -- 回车,使用默认的
## -- 上一个分区的结束应该作为下一个分区的启始
起始 扇区 (2048-41943039,默认为 2048): ## -- 回车,启始位置不指定使用默认的
将使用默认值 2048
Last 扇区, +扇区 or +size{K,M,G} (2048-41943039, 默认为 41943039):+1G ## -- 1GB大小
分区 1 已设置为 Linux 类型,大小设为 1 GiB
""" -- 重复上述步骤,新建第二个第三个第四个大小都为1G的主分区 -- """
命令(输入 m 获取帮助): n
Select (default p): p
分区号 (2-4,默认 2):
起始 扇区 (2099200-41943039,默认为 2099200):
Last 扇区, +扇区 or +size{K,M,G} (2099200-41943039, 默认为 41943039):+1G
命令(输入 m 获取帮助): n
Select (default p): p
分区号 (3,4,默认 3):
起始 扇区 (4196352-41943039,默认为 4196352):
Last 扇区, +扇区 or +size{K,M,G} (4196352-41943039, 默认为 41943039):+1G
命令(输入 m 获取帮助): n
Select (default e): p ## -- 建第4个分区的时候,fdisk工具已经开始提示,"default e,该建扩展分区啦"
## -- 当然,可以不听,执意创建主分区
已选择分区 4 ## -- 可以发现,因为只剩一个分区了,就不让你选择分区号啦
起始 扇区 (6293504-41943039, 默认为 6293504):
Last 扇区, +扇区 or +size{K,M,G} (6293504-41943039, 默认为 41943039):+1G
""" -- 我们已经创建了4个主分区(大小都为1G),哪怕还剩16G,空间够用也不能继续新建分区啦 -- """
命令(输入 m 获取帮助): n
## -- 如果要创建四个以上的分区,必须替换一个主分区优先使用扩展分区!!
If you want to create more than four partitions, you must replace a
primary partition with an extended partition first.
""" -- 删除第4个分区 -- """
命令(输入 m 获取帮助): d
分区号 (1-4,默认 4): 4
分区 4 已删除
""" -- 创建第4个分区为扩展分区,磁盘剩余的空间都给它 -- """
命令(输入 m 获取帮助):n
Partition type:
p primary (3 primary, 0 extended, 1 free)
e extended
Select (default e): e
已选择分区 4
起始 扇区 (6293504-41943039,默认为 6293504):
将使用默认值 6293504
Last 扇区, +扇区 or +size{K,M,G} (6293504-41943039, 默认为 41943039): ## -- 空格,默认剩下的都给
将使用默认值 41943039
分区 4 已设置为 Extended 类型, 大小设为 17 GiB
""" -- 查看磁盘已划分分区的信息 -- """
命令(输入 m 获取帮助): p
磁盘 /dev/sdb:21.5 GB, 21474836480 字节,41943040 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理): 512 字节 / 512 字节
I/O 大小(最小/最佳): 512 字节 / 512 字节
磁盘标签类型: dos
磁盘标识符: 0x651efb78
## -- 可以观察到,每个分区都是紧挨着的 2099199-2099200 4196351-4196352 6293503-6293504
设备 Boot Start End Blocks Id System
/dev/sdb1 2048 2099199 1048576 83 Linux
/dev/sdb2 2099200 4196351 1048576 83 Linux
/dev/sdb3 4196352 6293503 1048576 83 Linux
/dev/sdb4 6293504 41943039 17824768 5 Extended
""" -- 已经划分了四个主分区,接着新建的分区是在扩展分区里划分的逻辑分区 新建两个逻辑分区(2G和3G) -- """
命令(输入 m 获取帮助): n
All primary partitions are in use
添加逻辑分区 5
## -- 可以观察到逻辑分区默认的启始 6295552 接近于/dev/sdb4这一扩展分区的启始 6293504
## -- 没有紧贴,空出来的那部分空间记录的就是扩展分区里逻辑分区的信息
起始 扇区 (6295552-41943039,默认为 6295552): ## -- 同样的不指定启始位置
将使用默认值 6295552
Last 扇区, +扇区 or +size{K,M,G} (6295552-41943039,默认为 41943039): +2G
分区 5 已设置为 Linux 类型,大小设为 2 GiB
命令(输入 m 获取帮助): n
All primary partitions are in use
添加逻辑分区 6
起始 扇区 (10491904-41943039,默认为 10491904):
将使用默认值 10491904
Last 扇区, +扇区 or +size{K,M,G} (10491904-41943039,默认为 41943039): +3G
分区 6 已设置为 Linux 类型,大小设为 3 GiB
""" -- 保存退出 -- """
命令(输入 m 获取帮助): w
The partition table has been altered!
Calling ioctl() to re-read partition table.
正在同步磁盘.
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
可以查看下/dev/sdb的分区结果
partprobe
lsblk /dev/sdb
## -- 执行partprobe命令刷新一下分区表 更新分区表信息
[root@localhost ~]# partprobe
## -- 我们主要使用 sdb1、sdb2、sdb3、sdb5、sdb6
[root@localhost ~]# ls /dev/sdb ## -- 连续按两下Tab键!!
sdb sdb1 sdb2 sdb3 sdb4 sdb5 sdb6
[root@localhost ~]# lsblk /dev/sdb
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sdb 8:16 0 20G 0 disk
├─sdb1 8:17 0 1G 0 part
├─sdb2 8:18 0 1G 0 part
├─sdb3 8:19 0 1G 0 part
├─sdb4 8:20 0 1K 0 part
├─sdb5 8:21 0 2G 0 part
└─sdb6 8:22 0 3G 0 part
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# GPT进行分区
/dev/sdd 磁盘的空间大小为2.5T
[root@localhost ~]# lsblk /dev/sdd
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sdd 8:48 0 2.5T 0 disk
2
3
n 新建分区(建的每个分区都是主分区) p 查看已建分区的信息 d 删除 w 保存 q 退出
[root@localhost ~]# gdisk /dev/sdd
Command (? for help): n
Partition number (1-128, default 1):
First sector (34-5242879966, default = 2048) or {+-}size{KMGTP}:
Last sector (2048-5242879966, default = 5242879966) or {+-}size{KMGTP}: +1G
Current type is 'Linux filesystem' ## - 当前类型是“Linux 文件系统”
Hex code or GUID (L to show codes, Enter = 8300): ## - 通过L查看8300指的就是“Linux 文件系统”
## - Linux文件系统包含xfs,也就是该分区可以选择xfs格式化
Changed type of partition to 'Linux filesystem'
Partition number (2-128, default 2):
Last sector (2099200-5242879966, default = 5242879966) or {+-}size{KMGTP}: +1G
Command (? for help): p
Disk /dev/sdd: 5242880000 sectors, 2.4 TiB
... ... ...
Number Start (sector) End (sector) Size Code Name
1 2048 2099199 1024.0 MiB 8300 Linux filesystem
2 2099200 4196351 1024.0 MiB 8300 Linux filesystem
Command (? for help): w
Do you want to proceed? (Y/N): y
OK; writing new GUID partition table (GPT) to /dev/sdd.
The operation has completed successfully.
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
查看sdd分区的情况
[root@localhost ~]# lsblk /dev/sdd
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sdd 8:48 0 2.5T 0 disk
├─sdd1 8:49 0 1G 0 part
└─sdd2 8:50 0 1G 0 part
2
3
4
5
# 制作文件系统与挂载
磁盘容量小于2T的用MBR进行分区,容量大于2T的用GPT进行分区..
往后的操作就一样啦, 分完区后选择xfs对分区进行格式化...然后进行挂载..
# 格式化/制作文件系统
## -- 注意: 格式化后,分区里面的数据都没了
mkfs.xfs /dev/sdb1 # -- 格式化sdb1分区
mkfs.xfs /dev/sdb2 # -- 格式化sdb2分区
mkfs.xfs /dev/sdb3 # -- 格式化sdb3分区
mkfs.xfs /dev/sdb5 # -- 格式化sdb5分区
mkfs.xfs /dev/sdb6 # -- 格式化sdb6分区
mkfs.xfs /dev/sdd1 # -- sdd1分区
## -- 试着对/dev/sdb4这一扩展分区进行格式化,提示sdb4里包含分区表(指的就是sdb5、sdb6两个逻辑分区)
## -- 可以加上-f选项,强制格式化,但通常不会这么做
[root@localhost ~]# mkfs.xfs /dev/sdb4
mkfs.xfs: /dev/sdb4 appears to contain a partition table (dos).
mkfs.xfs: Use the -f option to force overwrite.
2
3
4
5
6
7
8
9
10
11
12
磁盘可以不分区,直接格式化制作文件系统,相当于整个盘是一个分区!!不建议这样做..
# 临时挂载
mount -t 源 挂载点
mount -a
可以不重启服务器, 让/etc/fstab
中的永久挂载配置生效!
mkdir /a
mkdir /b
mkdir /c
mkdir /d
mkdir /e
mount /dev/sdb1 /a
mount /dev/sdb2 /b
mount /dev/sdb3 /c
mount /dev/sdb5 /d
mount /dev/sdb6 /e
[root@localhost ~]# df | grep sdb
## 文件系统 1K-块 已用 可用 已用% 挂载点
/dev/sdb1 1038336 32992 1005344 4% /a
/dev/sdb2 1038336 32992 1005344 4% /b
/dev/sdb3 1038336 32992 1005344 4% /c
/dev/sdb5 2086912 32992 2053920 2% /d
/dev/sdb6 3135488 32992 3102496 2% /e
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 卸载
## -- umount /dev/sdb1 卸载文件系统或挂载点都能达到预期的效果
umount /a /b /c /d /e # -- 卸载多个
"""
若正处于某个分区下,umount卸载该分区,会提示目标忙
解决方案一: cd 到其他分区下
解决方案二: umount -l /a # -- 加上l选项,强制卸载
"""
2
3
4
5
6
7
# 从右往左最近原则
从右往左最近原则 同一个分区可以有多个挂载点
判断文件属于哪一个分区,需要从右到左进行分析..
从右往左最近原则: 文件离哪个挂载点最近, 就会存储到最近的挂载点所在的分区里..
打个比方, 在挂载点是个水龙头, 水从哪里来?挂载点从所对应的某个分区中取水!!!
mkdir /opt/a ## -- opt目录在根分区/里;根分区下创建的a目录也在根分区里
mount /dev/sdb1 /opt/a ## -- /opt/a成为了sdb1分区的挂载点
mkdir /opt/a/b ## -- 在/opt/a挂载点下创建的b目录存储在sdb1分区里
mount /dev/sdb2 /opt/a/b ## -- /opt/a/b成为了sdb2分区的挂载点
touch /opt/a/b/1.txt ## -- 在/opt/a/b挂载点下创建的1.txt文件存储在sdb2分区里
"""到此为止,问这几个分区下分别存储了什么? 可以反向验证**从右往左最近原则**!!!
根分区 opt、a
sdb1分区 b
sdb2分区 1.txt
★ /opt/a/b/1.txt 反向验证分析: 1.txt离/opt/a/b挂载点最近; b离/opt/a挂载点最近
简单粗暴,卸载了哪个分区,那个分区里的内容就不会显示..
但首先你要能卸载的了,比如这里直接umount /opt/a卸载sdb1分区是失败的!!要先卸载sdb2分区..
"""
[root@localhost opt]# tree /opt
/opt
└── a
└── b
└── 1.txt
2 directories, 1 file
[root@localhost opt]# echo 111 > /opt/a/b/1.txt
[root@localhost opt]# cat /opt/a/b/1.txt
111
[root@localhost opt]# df | grep sdb | grep -v grep
/dev/sdb1 1038336 32992 1005344 4% /opt/a
/dev/sdb2 1038336 32996 1005340 4% /opt/a/b
"""sdb2分区隐居山林,为何1.txt文件神秘消失?
因为1.txt文件是存储在sdb2分区里的!!sdb2分区未挂载就读取不了里面的内容.
"""
[root@localhost opt]# umount /opt/a/b
[root@localhost opt]# tree /opt
/opt
└── a
└── b
2 directories, 0 files
"""趁乱在/opt/a/b下创建的2.txt文件,根据从右到左最近原则,是存储在挂载点/opt/a所对应的sdb1分区里!!
"""
[root@localhost opt]# echo 222 > /opt/a/b/2.txt
[root@localhost opt]# cat /opt/a/b/2.txt
222
[root@localhost opt]# tree /opt
/opt
└── a
└── b
└── 2.txt
2 directories, 1 file
"""重新让/opt/a/b成为sdb2分区的挂载点,2.txt文件消失,1.txt文件重见江湖!
因为/opt/a/b挂载点会从sdb2分区里取水,sdb2分区里只有1.txt,可没有2.txt
"""
[root@localhost opt]# mount /dev/sdb2 /opt/a/b
[root@localhost opt]# tree /opt
/opt
└── a
└── b
└── 1.txt
2 directories, 1 file
"""开始作妖,/test和/opt/a/b都作为sdb2分区的挂载点!!
所以神奇的发现,新建的test目录下也出现了1.txt文件!!
进一步验证了,挂载点会从所对应的分区里取水!!
需要注意的是:不管是改变/test还是/opt/a/b下的1.txt文件,实则上都是更改sdb2分区里存储的1.txt!!!
/test/1.txt和/opt/a/b/1.txt会同时改变!!!
"""
[root@localhost opt]# cd
[root@localhost ~]# mkdir /test
[root@localhost ~]# mount /dev/sdb2 /test
[root@localhost ~]# tree /test
/test
└── 1.txt
0 directories, 1 file
[root@localhost ~]# mount | grep /dev/sdb2 ## -- df可能不会显示全,但mount命令显示的肯定是全的!!!
/dev/sdb2 on /opt/a/b type xfs (rw,relatime,attr2,inode64,noquota)
/dev/sdb2 on /test type xfs (rw,relatime,attr2,inode64,noquota)
"""小小验证下,b目录和2.txt都是存储在/opt/a对应的sdb1分区里
sdb1分区退隐江湖,b目录和2.txt都会消失!!!
"""
[root@localhost ~]# tree /opt
/opt
└── a
└── b
└── 1.txt
2 directories, 1 file
## -- 特别注意这里,直接umount /opt/a是失败的!!
[root@localhost ~]# umount /opt/a
umount: /opt/a:目标忙。
(有些情况下通过 lsof(8) 或 fuser(1) 可以
找到有关使用该设备的进程的有用信息)
[root@localhost ~]# umount /opt/a/b
[root@localhost ~]# tree /opt
/opt
└── a
└── b
└── 2.txt
2 directories, 1 file
[root@localhost ~]# umount /opt/a
[root@localhost ~]# tree /opt
/opt
└── a
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
# 永久挂载
上面操作的挂载都是临时挂载,
reboot
命令重启服务器后, 挂载会失效!!!
而linux中有些挂载就是永久的,如何做到的呢?
/etc/fstab
文件
要挂载的设备 | 挂载点(入口) | 文件系统类型 | 挂载参数 | 是否备份 | 是否检查 |
---|---|---|---|---|---|
UUID | 挂载点路径 | eg: xfs | defaults | 0 | 0 |
Ps: 通常是defaults 0 0, 具体的选项配置详见 https://zhuanlan.zhihu.com/p/337009754
## -- 查看linux中永久挂载的信息
[root@localhost ~]# cat /etc/fstab
/dev/mapper/centos-root / xfs defaults 0 0
UUID=7edef40b-555b-485b-a94c-4b345143b5d5 /boot xfs defaults 0 0
/dev/mapper/centos-swap swap swap defaults 0 0
## -- 查看每个磁盘的UUID
[root@localhost ~]# blkid
/dev/sdb1: UUID="057edccc-4db0-4688-bb18-5e2d5e681c5e" TYPE="xfs"
/dev/sdb2: UUID="41a7d6a4-b8b6-489a-892a-2e2c1e7d295e" TYPE="xfs"
/dev/sdb3: UUID="db12f68f-9ea0-4b7a-a927-47d8345dedd3" TYPE="xfs"
/dev/sdb5: UUID="29301422-0035-417c-bfd0-8d244ce59e0c" TYPE="xfs"
/dev/sdb6: UUID="73122250-bd11-4ca2-8c84-0a2e412ef708" TYPE="xfs"
/dev/sda1: UUID="7edef40b-555b-485b-a94c-4b345143b5d5" TYPE="xfs"
/dev/sda2: UUID="jG51ec-dKTo-gsGv-o7wf-2wXp-Irc8-FYrzXT" TYPE="LVM2_member"
/dev/mapper/centos-root: UUID="dc8ff591-4043-4c29-82bd-cdc39a0d48fb" TYPE="xfs"
/dev/mapper/centos-swap: UUID="9a6222cd-5632-4215-acbc-94a9b22ddd6e" TYPE="swap"
## -- 编辑/etc/fstab 将sdb1和sdb2进行挂载 通常使用UUID,使用分区名称(不建议)也可以
[root@localhost ~]# mkdir /root/test1
[root@localhost ~]# mkdir /root/test2
[root@localhost ~]# tail -2 /etc/fstab
UUID=057edccc-4db0-4688-bb18-5e2d5e681c5e /root/test1 xfs defaults 0 0
/dev/sdb2 /root/test2 xfs defaults 0 0
## -- reboot重启服务器后永久挂载生效
[root@localhost ~]# reboot
## -- 检查是否永久挂载成功
[root@localhost ~]# mount | grep sdb
/dev/sdb1 on /root/test1 type xfs (rw,relatime,attr2,inode64,noquota)
/dev/sdb2 on /root/test2 type xfs (rw,relatime,attr2,inode64,noquota)
## -- 不重启服务器,使用mount -a重新加载配置文件实现自动挂载
[root@localhost ~]# sed -i '$a /dev/sdb3 /opt xfs defaults 0 0' /etc/fstab
[root@localhost ~]# mount -a
[root@localhost ~]# mount | grep sdb
/dev/sdb1 on /root/test1 type xfs (rw,relatime,attr2,inode64,noquota)
/dev/sdb2 on /root/test2 type xfs (rw,relatime,attr2,inode64,noquota)
/dev/sdb3 on /opt type xfs (rw,relatime,attr2,inode64,noquota)
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
# 制作swap交换分区
查看swap分区的大小,当前是2个G,准备给它加1个G..
步骤: 新增分区 -- mkswap制作swap文件系统 -- 激活分区 -- 开机自动挂载新增的swap分区
swapon /dev/sdd3 swapon -s swapoff /dev/sdd3 swapoff -a
[root@localhost ~]# free -m
total used free shared buff/cache available
Mem: 972 621 61 9 289 190
Swap: 2047 4 2043
""" -- 从磁盘中划个1G空间的分区 sdb的逻辑分区 sdd的主分区都可以 -- """
gdisk /dev/sdd
partprobe
[root@localhost ~]# lsblk /dev/sdd
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sdd 8:48 0 2.5T 0 disk
├─sdd1 8:49 0 1G 0 part
├─sdd2 8:50 0 1G 0 part
└─sdd3 8:51 0 1G 0 part
""" -- 制作swap分区 -- """
[root@localhost ~]# mkswap /dev/sdd3
正在设置交换空间版本 1,大小 = 1048572 KiB
无标签,UUID=37fcc4d0-a581-404a-b13c-45311d09c7fc
""" -- 激活/临时挂载 刚制作好的swap分区 -- """
[root@localhost ~]# swapon /dev/sdd3
[root@localhost ~]# free -m
total used free shared buff/cache available
Mem: 972 622 70 9 279 189
Swap: 3071 4 3067
[root@localhost ~]# swapon -s
文件名 类型 大小 已用 权限
/dev/sdd3 partition 1048572 4872 -2
/dev/dm-1 partition 2097148 0 -3
## -- 开机自动挂载新增的swap分区
## -- 最好使用UUID
[root@localhost ~]# sed -i '$a /dev/sdd3 swap swap defaults 0 0' /etc/fstab
"""
实验了下 swapoff /dev/sdd3 关闭sdd3这个swap分区,
尽管写进了配置文件, 但使用mount -a命令不会重新挂载上去
可以使用swapon /dev/sdd3 重新激活/临时挂载
开机的时候会自动挂载文件里的swap配置
不就相当于永久挂载了嘛!!!!
"""
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
# Dell R740服务器制作RAID
RAID的基础理论详见: 0_计算机基础/1_计算机硬件组成.md 中 ◎ RAID技术 部分的内容...
Ps: 提一嘴,实体服务器需要做RAID,但大多数中小型公司用的阿里云(提供的是虚拟机),云环境不需要做RAID!!
简单回顾下:
在生产环境中,通常会将多个盘合到一起做一个RAID...
RAID0: 两块盘同时提供读写的功能,坏其中一块就不能用了;
RAID1: 称作备份盘/镜像盘, 一块读写,另一块备份, 通常系统盘做RAID1;
RAID5: 既考虑了读写速度也考虑了冗余..
RAID10: 土豪玩法.. 结合raid0和1的优点..
制作RAID需要raid卡这个设备,硬盘是插在raid卡上的.. raid卡将这些硬盘做成磁盘阵列..
具体过程参考: https://www.cnblogs.com/linhaifeng/articles/13921161.html
注意几个地方:
4.在BIOS界面ctrl+R进入阵列卡,不同厂商快捷键不一样,需要查一下;
6.多少个盘根据自己的需求选择;(这里选择的是要操作哪些盘)
7.create New VD # -- VD虚拟磁盘,即多个硬盘组成一个虚拟层面的硬盘
8.这里是选择哪些盘做RAID 按ok完成
9.可以将在步骤6中已经选中而没有做raid的硬盘 继续做其他raid
11.做的RAID5的话,还可以有一块热备盘(当RAID5中任一盘坏了,其余2块可以做奇偶校验将数据恢复到格外的热备盘中)
2
3
4
5
6
7
# 修复服务器文件系统
将一块硬盘分区,格式化制作文件系统,再挂载使用.. linux针对写操作会先将数据在内存的buffer缓冲区中攒一波, 若在将buffer中的数据往硬盘中写的过程中,突然断电重启后会提示文件错误: “emergency mode”...
# 模拟文件系统损坏
""" 1、准备一个1G的文件系统与数据 """
fdisk /dev/sdc # -- 创建容量大小为1G的分区/dev/sdc1
mkfs.xfs /dev/sdc1 # -- 格式化/dev/sdc1分区
mount /dev/sdc1 /mnt/ # -- 挂载使用
echo 111 > /mnt/1.txt # -- 1.txt在sdc1分区中
[root@localhost ~]# lsblk /dev/sdc
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sdc 8:32 0 20G 0 disk
└─sdc1 8:33 0 1G 0 part
[root@localhost ~]# mount | grep sdc1
/dev/sdc1 on /mnt type xfs (rw,relatime,attr2,inode64,noquota)
""" 2、模拟文件系统损坏 """
## -- 数据往硬盘中的文件写入的过程中,突然断电.. 文件就不完整啦
## -- 这里通过dd命令用冒0机往sdc硬盘中输入500M的数据,会覆盖掉硬盘中分区表的信息,整个结构就乱了..
## -- 注意哦,不是sdc1 是sdc
[root@localhost ~]# dd if=/dev/zero of=/dev/sdc bs=500M count=1
记录了1+0 的读入
记录了1+0 的写出
524288000字节(524 MB)已复制,1.14939 秒,456 MB/秒
""" 3、卸载后重新挂载,发现无法挂载 模拟断电后重启 """
[root@localhost ~]# umount /mnt
[root@localhost ~]# mount /dev/sdc1 /mnt/
mount: /dev/sdc1 写保护,将以只读方式挂载
mount: 文件系统类型错误、选项错误、/dev/sdc1 上有坏超级块、
缺少代码页或助手程序,或其他错误
有些情况下在 syslog 中可以找到一些有用信息- 请尝试
dmesg | tail 这样的命令看看..
## -- 吐槽一下: vm虚拟机上进行模拟,直接把/dev/sdc1分区给我干没了..无法开展修复的实验了..
## -- 修复部分就听理论吧!!
[root@localhost ~]# lsblk /dev/sdc
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sdc 8:32 0 20G 0 disk
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
文件系统损坏后,若不能成功重启,可以用单用户模式(进去无挂载)、光盘修复模式来管理操作本地硬盘中的东西...
# 文件系统修复
使用xfs_repair
命令强制修复后, 数据丢失, 所以此时修复的意义在于可用, 所以数据要有备份意识...
xfs_repair /dev/sdc1 # -- 修复时先尝试这条命令
xfs_repair -L /dev/sdb1 # -- 若上一条命令失败,进行强制修复
mount /dev/sdc1 /mnt/ # -- 重新挂载
若是ext文件系统,修复需要用fsck命令
# -y 对所有问题都回答 "yes"
# -f 即使文件系统标记为 clean 也强制进行检查
fsck -f -y /dev/sda1
2
3
4
5
6
7
8
# xfs文件系统备份与恢复
# 备份 xfsdump
全量备份 + 增量备份
第一次备份是全量备份,增量备份是和上一次的备份进行比较, 仅备份有差异的文件...
[root@localhost ~]# rpm -qf `which xfsdump`
xfsdump-3.1.7-1.el7.x86_64
[root@localhost ~]# rpm -qf `which xfsrestore`
xfsdump-3.1.7-1.el7.x86_64
2
3
4
选项
选项 | 含义 |
---|---|
-l | 是L的小写, 指定level, 有0~9共10个等级.默认值为0, 即完全备份 ; 数字1至9都是增量备份!! |
-L | 指定该次备份的标签名. |
-M | 简易描述信息, 关于什么什么的备份 |
-f | 备份的文件存放的路径 + 空格 + 需要备份文件的路径(备份源路径) |
切记: 备份源路径后面千万不要加/斜杠
""" -- 数据准备 -- """
[root@localhost ~]# mount | grep -E "sdb3|sda1"
/dev/sdb3 on /opt type xfs (rw,relatime,attr2,inode64,noquota)
/dev/sda1 on /boot type xfs (rw,relatime,attr2,inode64,noquota)
[root@localhost ~]# cp -r /etc /opt/
[root@localhost ~]# du -sh /opt
43M /opt
[root@localhost ~]# echo 111 > /opt/1.txt
[root@localhost ~]# ls /opt
1.txt etc
[root@localhost ~]# cat /opt/1.txt
111
""" -- 1.先做全量备份 -- """
## -- 将sdb3分区的内容 备份到 sda1分区下 (备份源与备份文件要分别属于两个不同的硬盘)
[root@localhost ~]# xfsdump -l 0 -L sdb3_bak -M sdb3_bak -f /boot/sdb3_bak_all /opt
... ... ...
xfsdump: Dump Status: SUCCESS
""" -- 2.做增量备份 做了两次增量备份-- """
## -- 增删改都属于增量的部分
echo 222 >> /opt/1.txt
echo 333 > /opt/2.txt
# 通常会在增量备份文件名上加上时间
xfsdump -l 1 -L sdb3_bak -M sdb3_bak -f /boot/sdb3_bak_add1 /opt
echo 333333 > /opt/3.txt
xfsdump -l 1 -L sdb3_bak -M sdb3_bak -f /boot/sdb3_bak_add2 /opt
""" -- 查看 -- """
# -- 备份源的大小
[root@localhost ~]# du -sh /opt/
43M /opt/
# -- 备份文件(全量、增量)的大小
# 可以发现增量备份sdb3_bak_add1、sdb3_bak_add2的大小是小于全量备份的,全量备份的大小是小于备份源的
[root@localhost ~]# ll -h /boot | grep sdb3_bak
-rw-r--r-- 1 root root 23K 8月 26 17:41 sdb3_bak_add1
-rw-r--r-- 1 root root 24K 8月 26 17:41 sdb3_bak_add2
-rw-r--r-- 1 root root 37M 8月 26 17:41 sdb3_bak_all
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
使用限制
1.必须用root权限
2.只能备份已挂载的文件系统
3.只能备份XFS文件系统
4.只能用xfsrestore进行恢复
5.通过文件系统的UUID来分辨备份档,因此不能备份相同UUID的文件系统
2
3
4
5
# 恢复 xfsrestore
""" -- 删除/opt里所有的内容 --"""
[root@localhost ~]# ls /opt
1.txt 2.txt 3.txt etc
0 directories, 3 files
[root@localhost ~]# rm -rf /opt/*
""" -- 依次恢复全量、增量1、增量2 -- """
# 全量
xfsrestore -f /boot/sdb3_bak_all /opt/
[root@localhost ~]# ls /opt
1.txt etc
[root@localhost ~]# cat /opt/1.txt
111
# 增量1
xfsrestore -f /boot/sdb3_bak_add1 /opt/
[root@localhost ~]# ls /opt
1.txt 2.txt etc
[root@localhost ~]# cat /opt/1.txt
111
222
[root@localhost ~]# cat /opt/2.txt
333
# 增量2
xfsrestore -f /boot/sdb3_bak_add2 /opt/
[root@localhost ~]# ls /opt
1.txt 2.txt 3.txt etc
[root@localhost ~]# cat /opt/3.txt
333333
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31