Linux基础知识之磁盘管理

一、描述GPT是什么,应该怎么使用。node

    早期磁盘第一个扇区里面含有的重要信息咱们称为 MBR (Master Boot Record) 格式,可是因为近年来磁盘的容量不断扩大,形成读写上的一些困扰, 甚至有些大于 2TB 以上的磁盘分区已经让某些操做系统没法存取。所以后来又多了一个新的磁盘分区格式,称为 GPT (GUID partitiontable)! 这两种分区格式与限制不太相同。linux

    由于过去一个扇区大小就是 512bytes 而已,不过目前已经有 4K 的扇区设计出现!为了兼容于全部的磁盘,所以在扇区的定义上面, 大多会使用所谓的逻辑区块地址(Logical Block Address, LBA)来处理。GPT 将磁盘全部区块以此 LBA(预设为 512bytes 喔!) 来规划,而第一个 LBA 称为 LBA0 (从0 开始编号)。与 MBR 仅使用第一个 512bytes 区块来纪录不一样, GPT 使用了 34 个 LBA 区块来纪录分区信息!同时与过去 MBR 仅有一的区块,被干掉就死光光的状况不一样, GPT 除了前面 34 个 LBA 以外,整个磁盘的最后 33 个 LBA 也拿来做为另外一个备份!web

blob.png

二、建立一个10G的分区,并格式化为ext4文件系统。要求:centos

(1)block大小为2048,预留空间20%,卷标为MYDATA,bash

(2)挂载至/mydata目录,要求挂载时禁止程序自动运行,且不更新文件的访问时间戳。app

(3)可开机自动挂载。dom

一、格式化一块10G的磁盘空间出来
        fdisk /dev/sda
        n
        1
        p
        默认起始
        +10G
    二、建立为ext4的文件系统
        mke2fs -t ext4 -b 2048 -L MYDATA -m 2 /dev/sda1
    三、修改默认挂载属性包含acl
        tune2fs -o acl /dev/sda1
    四、挂载至/data/mydata
        mkdir -p /data/mydata
        amount -o noexec noatime /data/mydata /dev/sda1
        开机自动挂载:
            在/etc/fstab中添加一行
            LALEL=MYDATA /data/mydata ext4 defaults,acl,noexec,noatime 0 0

三、建立一个大小为1G的swap分区,并启用。ide

一、先格式化一块1G的磁盘分区
        fdisk /dev/sda
        n
        2
        p
        默认起始值
        +1G
        调整磁盘类型为swap可用
        t
        82
        w
    二、重读分区
        kpartx -af /dev/sda
    三、建立swap文件系统
        (1)、临时
            mkswap /dev/sda3
            swapon /dev/sda3
        (2)、开机启动挂载
            编辑/etc/fstab,增长
            /dev/sda3 swap swap defaults 0 0

四、编写脚本计算/etc/passwd文件中第10个用户和第20个用户id号之和。布局

[root@localhost ~]# cat useridadd.sh
#!/bin/bash
#
num1=$(head -10 /etc/passwd | tail -1 | cut -d: -f3)
num2=$(head -20 /etc/passwd | tail -1 | cut -d: -f3)

sum=$(($num1+$num2))

echo $sum

五、将当前主机名保存至hostName变量中,主机名若是为空,或者为localhost.localdomain则将设置为www.magedu.com。 ui

hostName=$(hostname)

[ -z "$hostName" -o "$hostName" == "localhost.localdomain" ] && hostname www.magedu.com

六、编写脚本,经过命令行参数传入一个名户名,判断id号是偶数仍是奇数。

[root@localhost scripts]# cat userid_odd.sh
#!/bin/bash
#
[ $# -ne 1 ] && echo "Input one Arg" && exit 2;

uid=$(id -u $1)

uid_yu=$(($uid % 2))

if [ $uid_yu -eq 0 ];then
	echo "$1的ID号为偶数"
else
	echo "$1的ID号为奇数"
fi

七、lvm基本应用以及扩展缩减实现。

    LVM是逻辑卷管理(Logical Volume Manager)的简称,它是一种更为灵活的磁盘分区管理机制。LVM是在磁盘分区和文件系统之间添加的一层逻辑层,它为文件系统屏蔽下层的磁盘分区布局,向文件系统提供一个抽象的存储卷。经过LVM,Linux系统管理员可轻松地管理磁盘分区,如:既然LVM是创建在硬盘和分区之上的一层逻辑层,那么能够将多个硬盘、多个分区或RAID组织起来构建成存储卷组,做为一个存储池;而后在这个存储卷之上再将其划分出一个或多个逻辑卷,Linux系统管理员能够对这个划分出来的逻辑卷进行一系列操做(例如格式化、挂载等),能够将逻辑卷当作一个系统分区来对待,更重要的是,这个系统分区的大小还能够在线扩展或缩减。总的来讲,LVM使得系统分区独立于底层硬件。

wKioL1ioFHeBrdypAACNoQHXhBY068.png

    那么LVM是如何作到支持系统分区在线扩容或缩容的?咱们再梳理一下LVM的工做原理。要制做逻辑分区,首先须要将多个硬盘、多个分区或RAID制做成为便于识别的物理卷(PV, Physical Volume),将这些制做好的物理卷再构建成一个存储池,咱们把这个存储池称为卷组(VG, VolumeGroup),这是LVM的第一个逻辑层。在卷组这一层上再逻辑出一层逻辑卷(LV, LogicalVolume),这个逻辑卷LV可供用户使用,例如格式化、挂载、存储数据,至关于一个逻辑意义上的系统分区。而这个逻辑分区的空间大小取决于卷组VG的分配,所以逻辑卷LV的存储空间不能超过其所属卷组VG的总存储空间。


LVM建立:

// 磁盘分区,模拟建立物理磁盘过程
[root@cdcjtx-centos-001 ~]# fdisk /dev/sdb
欢迎使用 fdisk (util-linux 2.23.2)。

更改将停留在内存中,直到您决定将更改写入磁盘。
使用写入命令前请三思。


命令(输入 m 获取帮助):n
Partition type:
   p   primary (0 primary, 0 extended, 4 free)
   e   extended
Select (default p):
Using default response p
分区号 (1-4,默认 1):
起始 扇区 (2048-41943039,默认为 2048):
将使用默认值 2048
Last 扇区, +扇区 or +size{K,M,G} (2048-41943039,默认为 41943039):+3G
分区 1 已设置为 Linux 类型,大小设为 3 GiB

命令(输入 m 获取帮助):n
Partition type:
   p   primary (1 primary, 0 extended, 3 free)
   e   extended
Select (default p):
Using default response p
分区号 (2-4,默认 2):
起始 扇区 (6293504-41943039,默认为 6293504):
将使用默认值 6293504
Last 扇区, +扇区 or +size{K,M,G} (6293504-41943039,默认为 41943039):+4G
分区 2 已设置为 Linux 类型,大小设为 4 GiB

命令(输入 m 获取帮助):n
Partition type:
   p   primary (2 primary, 0 extended, 2 free)
   e   extended
Select (default p):
Using default response p
分区号 (3,4,默认 3):
起始 扇区 (14682112-41943039,默认为 14682112):
将使用默认值 14682112
Last 扇区, +扇区 or +size{K,M,G} (14682112-41943039,默认为 41943039):+2G
分区 3 已设置为 Linux 类型,大小设为 2 GiB

命令(输入 m 获取帮助):t
分区号 (1-3,默认 3):
Hex 代码(输入 L 列出全部代码):8e
已将分区“Linux”的类型更改成“Linux LVM”

命令(输入 m 获取帮助):t
分区号 (1-3,默认 3):2
Hex 代码(输入 L 列出全部代码):8e
已将分区“Linux”的类型更改成“Linux LVM”

命令(输入 m 获取帮助):t
分区号 (1-3,默认 3):1
Hex 代码(输入 L 列出全部代码):8e
已将分区“Linux”的类型更改成“Linux LVM”

命令(输入 m 获取帮助):w
The partition table has been altered!

Calling ioctl() to re-read partition table.
正在同步磁盘。
[root@cdcjtx-centos-001 ~]# fdisk /dev/sdb
欢迎使用 fdisk (util-linux 2.23.2)。

更改将停留在内存中,直到您决定将更改写入磁盘。
使用写入命令前请三思。


命令(输入 m 获取帮助):p

磁盘 /dev/sdb:21.5 GB, 21474836480 字节,41943040 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0xc950dffb

   设备 Boot      Start         End      Blocks   Id  System
/dev/sdb1            2048     6293503     3145728   8e  Linux LVM
/dev/sdb2         6293504    14682111     4194304   8e  Linux LVM
/dev/sdb3        14682112    18876415     2097152   8e  Linux LVM

命令(输入 m 获取帮助):q
// 建立PV
[root@cdcjtx-centos-001 ~]# pvcreate /dev/sdb1
  Physical volume "/dev/sdb1" successfully created.
[root@cdcjtx-centos-001 ~]# pvcreate /dev/sdb2
  Physical volume "/dev/sdb2" successfully created.
[root@cdcjtx-centos-001 ~]# pvcreate /dev/sdb3
  Physical volume "/dev/sdb3" successfully created.
[root@cdcjtx-centos-001 ~]# pvs
  PV         VG     Fmt  Attr PSize   PFree
  /dev/sda2  centos lvm2 a--  <19.00g    0
  /dev/sdb1         lvm2 ---    3.00g 3.00g
  /dev/sdb2         lvm2 ---    4.00g 4.00g
  /dev/sdb3         lvm2 ---    2.00g 2.00g
// 建立PE大小为12M,名称为TESTvg的逻辑卷组
[root@cdcjtx-centos-001 ~]# vgcreate -s 12M TESTvg /dev/sdb1 /dev/sdb2 /dev/sdb3
  Volume group "TESTvg" successfully created
[root@cdcjtx-centos-001 ~]# vgs
  VG     #PV #LV #SN Attr   VSize   VFree
  TESTvg   3   0   0 wz--n-  <8.98g <8.98g
  centos   1   2   0 wz--n- <19.00g     0
// 建立大小为4G,名为TESTlv的逻辑分区
[root@cdcjtx-centos-001 ~]# lvcreate -L 4G -n TESTlv TESTvg
  Rounding up size to full physical extent <4.01 GiB
  Logical volume "TESTlv" created.
[root@cdcjtx-centos-001 ~]# lvs
  LV     VG     Attr       LSize   Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  TESTlv TESTvg -wi-a-----  <4.01g
  root   centos -wi-ao---- <17.00g
  swap   centos -wi-ao----   2.00g
// 格式化分区为ext4类型,并挂载到/users目录下,将目录/etc/pam.d 复制到/users目录下
[root@cdcjtx-centos-001 ~]# mkfs.ext4 /dev/TESTvg/TESTlv
mke2fs 1.42.9 (28-Dec-2013)
文件系统标签=
OS type: Linux
块大小=4096 (log=2)
分块大小=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
263472 inodes, 1053696 blocks
52684 blocks (5.00%) reserved for the super user
第一个数据块=0
Maximum filesystem blocks=1080033280
33 block groups
32768 blocks per group, 32768 fragments per group
7984 inodes per group
Superblock backups stored on blocks:
        32768, 98304, 163840, 229376, 294912, 819200, 884736

Allocating group tables: 完成
正在写入inode表: 完成
Creating journal (32768 blocks): 完成
Writing superblocks and filesystem accounting information: 完成

[root@cdcjtx-centos-001 ~]# partprobe // 在不从新启动机器的状况下系统可以识别这些分区
[root@cdcjtx-centos-001 ~]# mount /dev/TESTvg/TESTlv /users/
[root@cdcjtx-centos-001 ~]# cp -R /etc/pam.d/ /users/
[root@cdcjtx-centos-001 ~]# ls -l /users/
总用量 20
drwx------ 2 root root 16384 5月  13 16:27 lost+found
drwxr-xr-x 2 root root  4096 5月  13 16:29 pam.d

LVM扩展:

// 为TESTlv新增长2G容量,并验证数据完整度

[root@cdcjtx-centos-001 ~]# lvextend -L +2G /dev/TESTvg/TESTlv // 扩展物理边界
  Rounding size to boundary between physical extents: 2.00 GiB.
  Size of logical volume TESTvg/TESTlv changed from <4.02 GiB (343 extents) to 6.02 GiB (514 extents).
  Logical volume TESTvg/TESTlv successfully resized.

[root@cdcjtx-centos-001 ~]# resize2fs /dev/TESTvg/TESTlv // 扩展逻辑边界
resize2fs 1.42.9 (28-Dec-2013)
Filesystem at /dev/TESTvg/TESTlv is mounted on /users; on-line resizing required
old_desc_blocks = 1, new_desc_blocks = 1
The filesystem on /dev/TESTvg/TESTlv is now 1579008 blocks long.

[root@cdcjtx-centos-001 ~]# ls -l /users/ //数据校验
总用量 20
drwx------ 2 root root 16384 5月  13 16:27 lost+found
drwxr-xr-x 2 root root  4096 5月  13 16:29 pam.d

LVM缩减:

// 将TESTlv缩减到2G大小,并校验数据完整性!
// 这里采用ext4做为文件系统类型
// 先卸载物理文件系统->文件系统的强制检测和修复->缩减逻辑边界->缩减物理边界->从新挂载

[root@cdcjtx-centos-001 ~]# umount /dev/TESTvg/TESTlv // 卸载物理文件系统

[root@cdcjtx-centos-001 ~]# e2fsck -f /dev/TESTvg/TESTlv // 文件系统的强制检测和修复
e2fsck 1.42.9 (28-Dec-2013)
第一步: 检查inode,块,和大小
第二步: 检查目录结构
第3步: 检查目录链接性
Pass 4: Checking reference counts
第5步: 检查簇概要信息
/dev/TESTvg/TESTlv: 67/391216 files (0.0% non-contiguous), 61501/1579008 blocks

[root@cdcjtx-centos-001 ~]# resize2fs /dev/TESTvg/TESTlv 2G // 缩减逻辑边界为2G大小
resize2fs 1.42.9 (28-Dec-2013)
Resizing the filesystem on /dev/TESTvg/TESTlv to 524288 (4k) blocks.
The filesystem on /dev/TESTvg/TESTlv is now 524288 blocks long.

[root@cdcjtx-centos-001 ~]# lvreduce -L 2G /dev/TESTvg/TESTlv // 缩减物理边界为2G大小
  Rounding size to boundary between physical extents: 2.00 GiB.
  WARNING: Reducing active logical volume to 2.00 GiB.
  THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce TESTvg/TESTlv? [y/n]: y // 确认执行,注意风险性
  Size of logical volume TESTvg/TESTlv changed from 6.02 GiB (514 extents) to 2.00 GiB (171 extents).
  Logical volume TESTvg/TESTlv successfully resized.

[root@cdcjtx-centos-001 ~]# mount /dev/TESTvg/TESTlv /users/ //从新挂载

[root@cdcjtx-centos-001 ~]# ls -l /users/ //数据查看
总用量 20
drwx------ 2 root root 16384 5月  13 16:27 lost+found
drwxr-xr-x 2 root root  4096 5月  13 16:29 pam.d

删除LVM:

[root@cdcjtx-centos-001 ~]# umount /users/

[root@cdcjtx-centos-001 ~]# lvremove /dev/TESTvg/TESTlv
Do you really want to remove active logical volume TESTvg/TESTlv? [y/n]: y
  Logical volume "TESTlv" successfully removed

[root@cdcjtx-centos-001 ~]# vgremove TESTvg
  Volume group "TESTvg" successfully removed

[root@cdcjtx-centos-001 ~]# pvremove /dev/sdb1
  Labels on physical volume "/dev/sdb1" successfully wiped.

[root@cdcjtx-centos-001 ~]# pvremove /dev/sdb2
  Labels on physical volume "/dev/sdb2" successfully wiped.

[root@cdcjtx-centos-001 ~]# pvremove /dev/sdb3
  Labels on physical volume "/dev/sdb3" successfully wiped.

[root@cdcjtx-centos-001 ~]# pvs
  PV         VG     Fmt  Attr PSize   PFree
  /dev/sda2  centos lvm2 a--  <19.00g    0

[root@cdcjtx-centos-001 ~]# vgs
  VG     #PV #LV #SN Attr   VSize   VFree
  centos   1   2   0 wz--n- <19.00g    0

[root@cdcjtx-centos-001 ~]# lvs
  LV   VG     Attr       LSize   Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  root centos -wi-ao---- <17.00g
  swap centos -wi-ao----   2.00g
相关文章
相关标签/搜索