磁盘管理

Posted fengpiaoluoye

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了磁盘管理相关的知识,希望对你有一定的参考价值。

磁盘管理
    • 磁盘介绍
    • 磁盘管理
    • 磁盘限额
    • 逻辑卷管理
    • 磁盘阵列

 

    • 磁盘介绍

硬盘最基本的组成部分是由坚硬金属材料制成的涂以磁性介质的盘片,不同容量硬盘的盘片数不等。每个盘片有两面,都可记录信息。盘片被分成许多扇形的区域,每个区域叫一个扇区,每个扇区可存储128×2的N次方(N=0.1.2.3)字节信息。在DOS中每扇区是128×2的2次方=512字节,盘片表面上以盘片中心为圆心,不同半径的同心圆称为磁道。硬盘中,不同盘片相同半径的磁道所组成的圆柱称为柱面。磁道与柱面都是表示不同半径的圆,在许多场合,磁道和柱面可以互换使用,我们知道,每个磁盘有两个面,每个面都有一个磁头,习惯用磁头号来区分。扇区,磁道(或柱面)和磁头数构成了硬盘结构的基本参数,帮这些参数可以得到硬盘的容量,基计算公式为:

存储容量=磁头数×磁道(柱面)数×每道扇区数×每扇区字节数

磁盘结构

技术图片

MBR(主引导记录)位于硬盘第一个物理扇区(绝对扇区)柱面0,磁头0,扇区1处。由于DOS是由柱面0,磁头1,扇区1开始,故MBR不属于DOS扇区,DOS不能直接访问。MBR中包含硬盘的主引导程序和硬盘分区表。分区表有4个分区记录区。记录区就是记录有关分区信息的一张表。它从主引导记录偏移地址01BEH处连续存放,每个分区记录区占16个字节。

1 磁盘的表示方法
2 /dev/sda1
3 sd 代表磁盘接口类型 USB SATA SAS等接口 IDE 用hd表示
4 a b c 磁盘的顺序
5 1 2 3 4磁盘中的分区号
    • 磁盘管理

磁盘分区、格式化、挂载

计算机中存放信息的主要的存储设备就是硬盘,但是硬盘不能直接使用,必须对硬盘进行分割,分割成的一块一块的硬盘区域就是磁盘分区。在传统的磁盘管理中,将一个硬盘分为两大类分区:主分区和扩展分区。主分区是能够安装操作系统,能够进行计算机启动的分区,这样的分区可以直接格式化,然后安装系统,直接存放文件。

分区是将一个硬盘驱动器分成若干个逻辑驱动器,分区是把硬盘连续的区块当做一个独立的磁硬使用。分区表是一个硬盘分区的索引,分区的信息都会写进分区表。

fdisk命令

 1 fdisk磁盘分区命令
 2 fidsk [命令选项] [参数]
 3 命令选项
 4 -l list 列出磁盘分区
 5 -u 与-l一起使用,显示分区的相关信息
 6 fdisk /dev/sda 为/dev/sda分区
 7 m :显示菜单和帮助信息
 8 a :活动分区标记/引导分区
 9 d :删除分区
10 l :显示分区类型
11 n :新建分区
12 p :显示分区信息
13 q :退出不保存
14 t :设置分区号
15 v :进行分区检查
16 w :保存修改
17 x :扩展应用,高级功能
18 命令缺点:单个分区不能超过2T 超过的话需要用parted命令
19 在linux 下大磁盘的分区不能再采用fdisk了,MBR分区表只支持2T磁盘,所以大于2T的磁盘必须使用GPT分区表。

parted磁盘分区命令

1 分区步骤
2 1)将磁盘指定为GPT格式
3 2)分区

分区信息显示:

dumpe2fs命令 注意:dumpe2fs是查看ext2/ext3/ext4 文件系统信息的命令

 1 dumpe2fs /dev/sda1
 2 dumpe2fs 1.39 (29-May-2006)
 3 Filesystem volume name: /boot
 4 Last mounted on:
 5 Filesystem UUID: e8697a35-7768-45c3-8063-15b0ba67d796
 6 Filesystem magic number: 0xEF53
 7 Filesystem revision #: 1 (dynamic)
 8 Filesystem features: has_journal ext_attr resize_inode dir_index filetype needs_recovery sparse_super
 9 Default mount options: user_xattr acl
10 Filesystem state: clean
11 Errors behavior: Continue
12 Filesystem OS type: Linux
13 Inode count: 26104
14 Block count: 104388
15 Reserved block count: 5219
16 Free blocks: 89714
17 Free inodes: 26070
18 First block: 1
19 Block size: 1024
20 Fragment size: 1024
21 Reserved GDT blocks: 256
22 Blocks per group: 8192
23 Fragments per group: 8192
24 Inodes per group: 2008
25 Inode blocks per group: 251
26 Filesystem created: Tue Oct 15 10:37:16 2013
27 Last mount time: Wed Oct 16 06:20:21 2013
28 Last write time: Wed Oct 16 06:20:21 2013
29 Mount count: 3
30 Maximum mount count: -1
31 Last checked: Tue Oct 15 10:37:16 2013
32 Check interval: 0 ()
33 Reserved blocks uid: 0 (user root)
34 Reserved blocks gid: 0 (group root)
35 First inode: 11
36 Inode size: 128
37 Journal inode: 8
38 Default directory hash: tea
39 Directory Hash Seed: 4e3f02e9-f3d1-4ad1-b87c-8f6258c50435
40 Journal backup: inode blocks
41 Journal size: 4114k

blkid命令 查看磁盘分区 UUID信息

1 # blkid /dev/vda1
2 /dev/vda1: UUID="eb448abb-3012-4d8d-bcde-94434d586a31" TYPE="ext4"

mkfs命令 磁盘格式化

格式化(format)是指对磁盘或磁盘中的分区(partition)进行初始化的一种操作,这种操作通常会导致现有的磁盘或分区中所有的文件被清除。格式化通常分为低级格式化和高级格式化。如果没有特别指明,对硬盘的格式化通常是指高级格式化,而对软盘的格式化则通常同时包括这两者。

 1 -L 标签名
 2 -V : 详细显示模式
 3 -t : 给定档案系统的型式,Linux 的预设值为 ext2
 4 -c : 在制做档案系统前,检查该partition 是否有坏轨
 5 -l bad_blocks_file : 将有坏轨的block资料加到 bad_blocks_file 里面
 6 -b : 给定 block 的大小
 7 关于block and inode dentry
 8 实验发现这句话不对
 9 block越大,inode越少,适合存储大文件的文件系统;block越小,inode越多,适合存储文件多而小的文件系统。
10 磁盘分区格式化
11 mkfs.ext4 /dev/sda3

mount命令

1 mount - mount a filesystem
2 命令语法
3 mount device dir
4 命令选线
5 -a 挂载所有文件系统,参考文件 /etc/fstab
6 -l 显示当前挂载
7 -t 文件系统类型
8 -o 指定挂载权限

umount命令

1 umount - 卸载文件系统
2 umount 设备挂载点|设备源
3 -l 懒惰卸载

    • 自动挂载 /etc/fstab文件

    •  1 设备 挂载点 文件系统 权限 备份 检测
       2 第一列 设备源文件或者UUID
       3 第二列 设备挂载点
       4 第三列 文件系统类型
       5 第四列
       6 auto: 系统自动挂载,fstab默认就是这个选项
       7 defaults: rw, suid, dev, exec, auto, nouser, and async.
       8 noauto 开机不自动挂载
       9 nouser 只有超级用户可以挂载
      10 ro 按只读权限挂载
      11 rw 按可读可写权限挂载
      12 user 任何用户都可以挂载
      13 
      14 第五列是dump备份设置。
      15 当其值设置为1时,将允许dump备份程序备份;设置为0时,忽略备份操作;
      16 
      17 第六列是fsck磁盘检查设置。
      18 其值是一个顺序。当其值为0时,永远不检查;而 / 根目录分区永远都为1。其它分区从2开始,数字越小越先检查,如果两个分区的数字相同,则同时检查。
    • 磁盘限额

 1 解决了共用存储环境中,用户使用量的问题。
 2 1)开启磁盘限额功能
 3 修改/etc/fstab 文件,在指定的分区权限字段加入对应的限额项(usrquota,grpquota)
 4 usrquota 针对用户做限额
 5 grpquota 针对组做限额
 6 2)重挂磁盘生效
 7 mount -o remount /dev/sdb1
 8 3)扫描磁盘,统计用户现在的使用情况
 9 quotacheck -avug
10 4)编辑限额项
11 edquota username | groupname
12 -u 设置用户的quota,这是预设的参数。
13 -g 设置群组的quota。
14 -p<源用户名称> 将源用户的quota设置套用至其他用户或群组
15 -t 设置宽限期限。
16 -vu/g 查看用户/组使用情况
17 5)开启限额
18 quotaon -a
    • LVM逻辑卷管理

在分区的时候,每个分区应该分多大是令人头疼的,而且随着长时间的运行,分区不管你分多大,都会被数据给占满。当遇到某个分区不够用时管理员可能甚至要备份整个系统、清除硬盘、重新对硬盘分区,然后恢复数据到新分区。

虽然现在有很多动态调整磁盘的工具可以使用,但是它并不能完全解决问题,因为某个分区可能会再次被耗尽;另外一个方面这需要重新引导系统才能实现,对于很多关键的服务器,停机是不可接受的,而且对于添加新硬盘,希望一个能跨越多个硬盘驱动器的文件系统时,分区调整程序就不能解决问题。

因此完美的解决方法应该是在零停机前提下可以自如对文件系统的大小进行调整,可以方便实现文件系统跨越不同磁盘和分区。那么我们可以通过逻辑盘卷管理(LVM,Logical Volume Manager)的方式来非常完美的实现这一功能。

解决思路:将所有可用存储汇集成池,当池中某个分区空间不够时就会从池中继续划分空间给分区,池中空间不够就可以通过加硬盘的方式来解决。

使用逻辑:inux 分区——(转换)物理卷—(N个组成)卷组——(分为N个)逻辑卷

名词解释:

物理卷

物理卷就是指硬盘分区或从逻辑上与磁盘分区具有同样功能的设备(如RAID),是LVM的基本存储逻辑块,但和基本的物理存储介质(如分区、磁盘等)比较,却包含有与LVM相关的管理参数

卷组

LVM卷组类似于非LVM系统中的物理硬盘,其由物理卷组成。可以在卷组上创建一个或多个“LVM分区”(逻辑卷),LVM卷组由一个或多个物理卷组成。

逻辑卷

LVM的逻辑卷类似于非LVM系统中的硬盘分区,在逻辑卷之上可以建立文件系统(比如/home或者/usr等)。

PE

每一个物理卷被划分为称为PE(Physical Extents)的基本单元,具有唯一编号的PE是可以被LVM寻址的最小单元。PE的大小是可配置的,默认为4MB。

LE

逻辑卷也被划分为被称为LE(Logical Extents) 的可被寻址的基本单位。在同一个卷组中,LE的大小和PE是相同的,并且一一对应。

物理卷管理

物理卷的创建—-pvcreate命令

1 pvcreate [命令选项] [参数]
2 将物理分区转换为物理卷
3 命令选项
4 -f:强制创建物理卷,不需要用户确认;
5 -u:指定设备的UUID;
6 -y:所有的问题都回答“yes”;
7 -Z:是否利用前4个扇区。

物理卷的移除—-pvremove命令

1 pvremove [命令选项] [参数]
2 将物理卷转换为普通linux分区
3 命令选项
4 -d 调试模式
5 -f 强制删除
6 -y 对提问回答“yes”

物理卷查看命令

1 pvs 显示PV简况
2 pvdisplay 显示PV详细信息

物理卷扫描命令—-pvscan

卷组管理

将多个物理卷组成一个卷组,形成一个存储池

vgcreate命令

1 vgcreate -s 32 vg1000 /dev/sdb1 /dev/sdc1

vgreduce命令

1 vgreduce /dev/vg1000 /dev/sdb1

vgextend命令

1 vgextend /dev/vg1000 /dev/sdb1

逻辑卷管理

lvcreate命令

1 lvcreate -n lv99 -L 3G /dev/vg1000

lvextend命令

1 #enlarge logical volume
2 lvextend -L 3.5G /dev/vg1000/lv99
3 resize2fs /dev/vg1000/lv99

lvreduce命令

1 #shrink logical volume
2 e2fsck -f /dev/vg1000/lv99
3 resize2fs /dev/vg1000/lv99 2G
4 lvreduce -L 2G /dev/vg1000/lv99 (lvresize)

逻辑卷移除

1 #remove LVM
2 umount /dev/vg1000/lv99
3 lvremove /dev/vg1000/lv99
4 vgremove /dev/vg1000/
5 pvremove /dev/sdb1 /dev/sdc1

注意:

PE 和 LE的说明及应用策略

PE(physicalextent)

每一个物理卷被划分为称为PE(PhysicalExtents)的基本单元,具有唯一编号的PE是可以被LVM寻址的最小单元。PE的大小是可配置的,默认为4MB。

*LE(logicalextent)

逻辑卷也被划分为被称为LE(LogicalExtents)的可被寻址的基本单位。在同一个卷组中,LE的大小和PE是相同的,并且一一对应。

设置使用大小为4MB的PE(默认为4MB),这表示卷组上创建的所有逻辑卷都以4MB为增量单位来进行扩充 或缩减。由于内核原因,PE大小决定了逻辑卷的最大大小,4MB的PE决定了单个逻辑卷最大容量为256GB,若希望使用大于256G的逻辑卷则创建卷组 时指定更大的PE。PE大小范围为8KB到512MB,并且必须总是2的倍数

逻辑卷应用案例

案例一 LV快照

 1 1.新建LV 挂载 写入数据
 2 新建LVM100逻辑卷 大小为1000M 为其创建快照
 3 [root@rhel7 ~]# lvcreate -L 1000M -n lv100 vg100
 4 [root@rhel7 ~]# mkfs.ext3 /dev/vg100/lv100
 5 [root@rhel7 ~]# mkdir /data
 6 [root@rhel7 ~]# mount /dev/vg100/lv100 /data
 7 [root@rhel7 ~]# cp /etc/*.conf /data
 8 2.创建快照
 9 [root@rhel7 ~]# lvcreate -L 1000M -s -n lvm100snap /dev/vg100/lv100 为/dev/vg100/lv100创建一个名为lvm100snap 的快照 大小为1000M
10 #lvdisplay (不用挂载就可以 备份的时候在挂载就行)
11 3.挂载快照
12 [root@rhel7 ~]# mkdir /mnt/dump
13 [root@rhel7 ~]# mount -o ro/dev/vg100/lvm100snap /mnt/dump
14 注意是COW写复制 默认新建快照里面没有东西,需要进行写入操作才会备份,注意lvdisplay Allocated to snapshot 0.00% 如果是0 则就没数据备份 需要写入等一会
15 写操作 (ls -lR / ;ls -lR /)&>./ls.txt
16 4.备份快照
17 [root@rhel7 ~]# dump -0u -f /tmp/lvm_dump /mnt/dump
18 5.删除快照
19 [root@rhel7 ~]# umount /mnt/dump
20 [root@rhel7 ~]# lvremove /dev/vg100/lvm100snap
21 6.清空data内的内容
22 [root@rhel7 ~]# umount /data
23 [root@rhel7 ~]# mkfs.ext3 /dev/vg100/lv100
24 [root@rhel7 ~]# mount /dev/vg100/lv100 /data
25 7.恢复快照中的内容
26 [root@rhel7 ~]# cd /data
27 [root@rhel7 ~]# restore -rf /tmp/data-backup.dump

案例二 LVM中有PV出现了坏道

 1 #LVM中有PV出现了坏道
 2 #数据拷贝 将/dev/sdc1拷贝到/dev/sdd1
 3 [root@rhel7 ~]#lvchange -an /dev/baism/abc
 4 [root@rhel7 ~]# pvmove /dev/sdc1 /dev/sdd1
 5 /dev/sdc1: Moved: 2.7%
 6 /dev/sdc1: Moved: 100.0%
 7 [root@rhel7 ~]# vgchange -a n /dev/baism
 8 0 logical volume(s) in volume group "baism" now active
 9 [root@rhel7 ~]# vgreduce baism /dev/sdc1
10 Removed "/dev/sdc1" from volume group "baism"
11 [root@rhel7 ~]# vgchange -a y /dev/baism
12 1 logical volume(s) in volume group "baism" now active
13 [root@rhel7 ~]#lvchange -ay /dev/baism/abc
14 #卷组迁移
15 #导出卷组 old machine
16 [root@rhel7 ~]# vgexport /dev/baism
17 Volume group "baism" successfully exported
18 #导入卷组 new machine
19 [root@rhel7 ~]# pvscan
20 [root@rhel7 ~]# vgimport /dev/baism
21 Volume group "baism" successfully imported
22 [root@rhel7 ~]# vgchange -a y /dev/baism
23 1 logical volume(s) in volume group "baism" now active
24 [root@rhel7 ~]#lvchange -ay /dev/baism/abc

案例三 volume merged lv合并

 1 root@rhel7 lvm]# vgcreate baism1 /dev/sdc1
 2 Volume group "baism1" successfully created
 3 [root@rhel7 lvm]# vgcreate baism2 /dev/sdd1
 4 Volume group "baism2" successfully created
 5 [root@rhel7 lvm]# vgmerge -v baism1 baism2
 6 Checking for volume group "baism1"
 7 Checking for volume group "baism2"
 8 Archiving volume group "baism2" metadata (seqno 1).
 9 Archiving volume group "baism1" metadata (seqno 1).
10 Writing out updated volume group
11 Creating volume group backup "/etc/lvm/backup/baism1" (seqno 2).
12 Volume group "baism2" successfully merged into "baism1"

案例四 volume spilt lv分割

1 [root@rhel7 ~]# vgsplit baism1 baism2 /dev/sdd1
2 New volume group "baism2" successfully split from "baism1"
3 baism1 Old volume
4 baism2 New volume /dev/sdd1

案例五 逻辑卷从旧机器迁移到新机器

 1 #########Backing Up Volume Group Metadata:
 2 当创建vg的时候,系统默认会自动备份Metadata。/etc/lvm/backup下面存放的是metadata的备份信息,而/etc/lvm/archive下面存放的是metadata的archive信息。
 3 [root@rhel7 backup]# pwd
 4 /etc/lvm/backup
 5 [root@rhel7 backup]# strings baism2
 6 # Generated by LVM2 version 2.02.87(2)-rhel7 (2011-10-12): Mon Jan 14 22:27:02 2013
 7 contents = "Text Format Volume Group"
 8 version = 1
 9 description = "Created *after* executing ‘vgsplit baism1 baism2 /dev/sdd1‘" #warn
10 creation_host = "rhel7" # Linux rhel7 2.6.32-220.el6.x86_64 #1 SMP Wed Nov 9 08:03:13 EST 2011 x86_64
11 creation_time = 1358173622 # Mon Jan 14 22:27:02 2013
12 baism2 {
13 id = "Ft0eD7-oVca-mwY6-6FeK-TwW2-hTrj-aYxYbq"
14 seqno = 2
15 status = ["RESIZEABLE", "READ", "WRITE"]
16 flags = []
17 extent_size = 8192 # 4 Megabytes
18 max_lv = 0
19 max_pv = 0
20 metadata_copies = 0
21 physical_volumes {
22 pv0 {
23 id = "m7aKrr-D0r9-jOJ2-aK51-ec25-4rwH-4ccbbh"
24 device = "/dev/sdd1" # Hint only
25 status = ["ALLOCATABLE"]
26 flags = []
27 dev_size = 4192902 # 1.99933 Gigabytes
28 pe_start = 2048
29 pe_count = 511 # 1.99609 Gigabytes
30 创建线型逻辑卷
31 [root@rhel7 backup]# lvcreate -l 20%VG -n abc baism1
32 Logical volume "abc" created
33 [root@rhel7 backup]# lvs
34 Volume group baism2 is exported
35 LV VG Attr LSize Origin Snap% Move Log Copy% Convert
36 abc baism1 -wi-a- 408.00m
37 Moving a Volume Group to Another System
38 导出
39 [root@rhel7 backup]# pvscan
40 PV /dev/sdd1 VG baism2 lvm2 [2.00 GiB / 2.00 GiB free]
41 PV /dev/sdc1 VG baism1 lvm2 [2.00 GiB / 2.00 GiB free]
42 PV /dev/sda3 VG vg_rhel7 lvm2 [17.85 GiB / 8.08 GiB free]
43 PV /dev/sde1 lvm2 [2.00 GiB]
44 Total: 4 [23.84 GiB] / in use: 3 [21.84 GiB] / in no VG: 1 [2.00 GiB]
45 [root@rhel7 backup]# vgchange -an baism2
46 0 logical volume(s) in volume group "baism2" now active
47 [root@rhel7 backup]# vgexport baism2
48 Volume group "baism2" successfully exported
49 [root@rhel7 backup]# pvscan
50 PV /dev/sdd1 is in exported VG baism2 [2.00 GiB / 2.00 GiB free]
51 PV /dev/sdc1 VG baism1 lvm2 [2.00 GiB / 2.00 GiB free]
52 PV /dev/sda3 VG vg_rhel7 lvm2 [17.85 GiB / 8.08 GiB free]
53 PV /dev/sde1 lvm2 [2.00 GiB]
54 Total: 4 [23.84 GiB] / in use: 3 [21.84 GiB] / in no VG: 1 [2.00 GiB]
55 [root@rhel7 backup]#
56 导入
57 [root@rhel7 ~]# vgimport baism2
58 Volume group "baism2" successfully imported
59 [root@rhel7 ~]# vgchange -a y baism2
60 0 logical volume(s) in volume group "baism2" now active
61 [root@rhel7 ~]# vgscan
62 Reading all physical volumes. This may take a while...
63 Found volume group "baism2" using metadata type lvm2
64 Found volume group "baism1" using metadata type lvm2
65 Found volume group "vg_rhel7" using metadata type lvm2
66 [root@rhel7 ~]# vgs
67 VG #PV #LV #SN Attr VSize VFree
68 baism1 1 1 0 wz--n- 2.00g 1.60g
69 baism2 1 0 0 wz--n- 2.00g 2.00g
70 vg_rhel7 1 1 0 wz--n- 17.85g 8.08g

  • 磁盘阵列

    mdadm命令

  • 1.
    mdadm tools
    mdadm -C /dev/md1 -l 5 -n 3 /dev/sd{b,c,d}1
    cat /proc/mdstat
    mdadm —detail /dev/md1
    #create raid config file
    echo “DEVICE /dev/sdb1 /dev/sdc1 /dev/sdd1 “ >> /etc/mdadm.conf
    mdadm -Ds >> /etc/mdadm.conf
    #mount raid 5
    mkfs.exte /dev/md1
    mount /dev/md1 /data
    #stop raid 5
    umount /data
    mdadm -S /dev/md1
    
    故障模拟
    新添加一块新盘到系统 sde5
    mdadm /dev/md1 —add /dev/sde (mdadm -a /dev/md1 /dev/sde1)
    mdadm -f /dev/md1 /dev/sdc1
    
    cat /proc/mdstat
    md1 : active raid5 sde[3] sdd1[2] sdc14 sdb1[0]
    4192768 blocks level 5, 64k chunk, algorithm 2 [3/2] [U_U]
    [=>……………….] recovery = 5.7% (121300/2096384) finish=0.8min s
    [=>……………….] recovery = 5.7% sde recovery 开始接替sdc工作
    [===================>.] recovery = 95.5%
    
    #remove /dev/sdc1
    mdadm -r /dev/md1 /dev/sdc1
    
    #boot raid
    mdadm -As
    
    思考 raid10 raid1+raid1—>raid0 (启动raid中先启动raid1 后启动 raid0 关闭raid 先关上层raid0,在关闭raid1)

以上是关于磁盘管理的主要内容,如果未能解决你的问题,请参考以下文章

massCode 一款优秀的开源代码片段管理器

如何管理在每个 git 版本中添加私有代码片段?

Swift新async/await并发中利用Task防止指定代码片段执行的数据竞争(Data Race)问题

Swift新async/await并发中利用Task防止指定代码片段执行的数据竞争(Data Race)问题

如何使用Android片段管理器传递变量[重复]

Android:使用支持片段管理器时复制片段