Linux基础知识之磁盘管理

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

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

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

blob.png

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

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

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

(3)可开机自动挂载。

1、格式化一块10G的磁盘空间出来
        fdisk /dev/sda
        n
        1
        p
        默认起始
        +10G
    2、创建为ext4的文件系统
        mke2fs -t ext4 -b 2048 -L MYDATA -m 2 /dev/sda1
    3、修改默认挂载属性包含acl
        tune2fs -o acl /dev/sda1
    4、挂载至/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

3、创建一个大小为1G的swap分区,并启用。

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

4、编写脚本计算/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

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

hostName=$(hostname)

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

6、编写脚本,通过命令行参数传入一个名户名,判断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

7、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















猜你喜欢

转载自blog.51cto.com/12686444/2328190