千家信息网

GPT,LVM概念以及shell脚本基础

发表于:2024-11-23 作者:千家信息网编辑
千家信息网最后更新 2024年11月23日,GPT,LVM概念以及shell脚本基础描述GPT是什么,应该怎么使用1.GPT的全称是Globally Unique Identifier Partition Table,意即GUID分区表,GUI
千家信息网最后更新 2024年11月23日GPT,LVM概念以及shell脚本基础

GPT,LVM概念以及shell脚本基础

  • 描述GPT是什么,应该怎么使用
    1.GPT的全称是Globally Unique Identifier Partition Table,意即GUID分区表,GUID 分区表 (GPT) 是作为 Extensible Firmware Interface (EFI) 计划的一部分引入的。相对于以往 PC 普遍使用的主引导记录 (MBR) 分区方案,GPT 提供了更加灵活的磁盘分区机制。分区指物理或逻辑磁盘上彼此连接的存储空间,但提供功能时就像物理上分隔的磁盘一样。对于系统固件和已安装的操作系统来说,分区是可见的。操作系统启动之前,对分区的访问由系统固件控制,操作系统启动后则由操作系统控制。
    2.具有以下优点:
    (1)支持2TB以上的大硬盘;
    (2)每个磁盘的分区个数几乎没有限制(Windows系统最多只允许划分128个分区);
    (3)分区大小几乎没有限制。又是一个"几乎"。因为它用64位的整数表示扇区号,即 = 18,446,744,073,709,551,616;
    (4)分区表自带备份。在磁盘的首尾部分分别保存了一份相同的分区表,其中一份被破坏后,可以通过另一份恢复;
    (5)循环冗余检验值针对关键数据结构而计算,提高了数据崩溃的检测几率;
    (6)虽然MBR提供1字节分区类型代码,但GPT使用一个16字节的全局唯一标识符(GUID)值来标识分区类型,这使分区类型更不容易冲突;
    (7)每个分区可以有一个名称(不同于卷标)。
    3.要想使用GPT分区表必须是UEFI BIOS环境,UEFI和GPT相辅相成的,二者缺一不可,现在的服务器主板基本采用UEFI+BIOS共存模式,并且BIOS中集成UEFI启动项,如果我们的系统盘大小超过了2T我们需要使用UEFI模式进行系统安装并进行系统启动,在对大于2T的非系统盘进行分区时我们需要选择GPT分区格式。
  • 创建一个10G的分区,并格式化为ext4文件系统:
    要求:(1)block大小为2048,预留空间20%,卷标为MYDATA,
    (2)挂载至/mydata目录,要求挂载时禁止程序自动运行,且不更新文件的访问时间戳。
    (3)可开机自动挂载。
    (1)fdisk创建10G分区
    [root@localhost ~]# fdisk /dev/sdaWelcome 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): nAll primary partitions are in useAdding logical partition 6First sector (141940736-419430399, default 141940736): Using default value 141940736Last sector, +sectors or +size{K,M,G} (141940736-419430399, default 419430399): +10GPartition 6 of type Linux and of size 10 GiB is setCommand (m for help): wThe partition table has been altered!Calling ioctl() to re-read partition table.WARNING: Re-reading the partition table failed with error 16: Device or resource busy.The kernel still uses the old table. The new table will be used atthe next reboot or after you run partprobe(8) or kpartx(8)Syncing disks.

    (2)mkfs创建文件系统:

    [root@localhost ~]# mkfs.ext4 -b 2048 -m 20 -L MYDATA /dev/sda6/mke2fs 1.42.9 (28-Dec-2013)Could not stat /dev/sda6/ --- Not a directory[root@localhost ~]# mkfs.ext4 -b 2048 -m 20 -L MYDATA /dev/sda6mke2fs 1.42.9 (28-Dec-2013)Filesystem label=MYDATAOS type: LinuxBlock size=2048 (log=1)Fragment size=2048 (log=1)Stride=0 blocks, Stripe width=0 blocks655360 inodes, 5242880 blocks1048576 blocks (20.00%) reserved for the super userFirst data block=0Maximum filesystem blocks=273678336320 block groups16384 blocks per group, 16384 fragments per group2048 inodes per groupSuperblock backups stored on blocks: 16384, 49152, 81920, 114688, 147456, 409600, 442368, 802816, 1327104, 2048000, 3981312Allocating group tables: done                            Writing inode tables: done                            Creating journal (32768 blocks): doneWriting superblocks and filesystem accounting information: done   

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

    [root@localhost ~]# mkdir -p /mydata[root@localhost ~]# vim /etc/fstab/dev/sda6                        /mydata                 ext4    defaults,noatime,noexec 0 0[root@localhost ~]# mount -a[root@localhost ~]# df -hFilesystem      Size  Used Avail Use% Mounted on/dev/sda2        47G  5.2G   42G  12% /devtmpfs        523M     0  523M   0% /devtmpfs           538M     0  538M   0% /dev/shmtmpfs           538M  7.8M  530M   2% /runtmpfs           538M     0  538M   0% /sys/fs/cgroup/dev/sda1       497M  151M  346M  31% /boot/dev/sda3        19G   39M   19G   1% /datatmpfs           108M  4.0K  108M   1% /run/user/42tmpfs           108M   32K  108M   1% /run/user/1000/dev/sr0        8.1G  8.1G     0 100% /run/media/wl/CentOS 7 x86_64tmpfs           108M     0  108M   0% /run/user/0/dev/sda6       9.8G   13M  7.8G   1% /mydata
  • 创建一个大小为1G的swap分区,并启用:
    [root@localhost ~]# fdisk /dev/sda 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): nAll primary partitions are in useAdding logical partition 7First sector (162914304-419430399, default 162914304): Using default value 162914304Last sector, +sectors or +size{K,M,G} (162914304-419430399, default 419430399): +1GPartition 7 of type Linux and of size 1 GiB is setCommand (m for help): tPartition number (1-7, default 7): 7Hex code (type L to list all codes): 82Changed type of partition 'Linux' to 'Linux swap / Solaris'Command (m for help): wThe partition table has been altered!Calling ioctl() to re-read partition table.WARNING: Re-reading the partition table failed with error 16: Device or resource busy.The kernel still uses the old table. The new table will be used atthe next reboot or after you run partprobe(8) or kpartx(8)Syncing disks.[root@localhost ~]# mkswap /dev/sda7 Setting up swapspace version 1, size = 1048572 KiBno label, UUID=ba42d9ae-41a0-4829-bd14-a32834cf6ec9[root@localhost ~]# swapon /dev/sda7[root@localhost ~]# vim /etc/fstab /dev/sda7                                 swap                    swap    defaults      0  0 
  • 编写脚本计算/etc/passwd文件中第10个用户和第20个用户id号之和
    #!/bin/bash#判断系统是否存在20个用户id_sum=$( cat /etc/passwd | wc -l )[ ${id_sum} -lt 20 ] && echo "用户个数小于20" && exit 2id1=$(head -10 /etc/passwd | tail -1 | cut  -d: -f3)id2=$(head -20 /etc/passwd | tail -1 | cut -d: -f3)idsum=$[${id1}+${id2}]echo "Ths sum is $idsum"[root@localhost scripts]# bash -x  idsum2.sh ++ cat /etc/passwd++ wc -l+ id_sum=58+ '[' 58 -lt 20 ']'++ head -10 /etc/passwd++ tail -1++ cut -d: -f3+ id1=11++ head -20 /etc/passwd++ tail -1++ cut -d: -f3+ id2=997+ idsum=1008+ echo 'Ths sum is 1008'Ths sum is 1008
  • 将当前主机名保存至hostName变量中,主机名如果为空,或者为
    localhost.localdomain则将设置为www.magedu.com
    #!/bin/bashhostName=$(hostname)[ -z "${hostName}" -o "${hostName}" == "localhost.localdomain" -o "${hostName}" == "locahost" ] && hostnamectl set-hostname www.magedu.com || echo "主机名:${hostName},不要修改"[root@localhost scripts]# bash -x hostname.sh ++ hostname+ hostName=localhost.localdomain+ '[' -z localhost.localdomain -o localhost.localdomain == localhost.localdomain -o   localhost.localdomain == locahost ']'+ hostnamectl set-hostname www.magedu.com
  • 编写脚本,通过命令行参数传入一个用户名,判断id号是偶数还是奇数
    #!/bin/bash#脚本判断参数用户ID奇偶类型[ $# -lt 1 ] && echo "At least a username " && exit 1! id $1 && echo "No such user" && exit 2userid=$(id -u $1)useri=$[${userid}%2]if [ ${useri} -eq 0 ];thenecho "$1 ID 是偶数"elseecho "$1 ID 是奇数"firoot@localhost scripts]# bash -xv   id.sh  user3#!/bin/bash#脚本判断参数用户ID奇偶类型[ $# -lt 1 ] && echo "At least a username " && exit 1+ '[' 1 -lt 1 ']'! id $1 && echo "No such user" && exit 2+ id user3uid=1003(user3) gid=1003(user3) groups=1003(user3)userid=$(id -u $1)++ id -u user3+ userid=1003useri=$[${userid}%2]+ useri=1if [ ${useri} -eq 0 ];then echo "$1 ID 是偶数"else echo "$1 ID 是奇数"fi+ '[' 1 -eq 0 ']'+ echo 'user3 ID 是奇数'user3 ID 是奇数
  • lvm基本应用以及扩展缩减实现
    (1) LVM原理描述
    LVM是(Logical Volume Manager) 逻辑卷管理的简写,它是Linux环境下对磁盘分区进行管理的一种机制。LVM是建立在硬盘和分区之上的一个逻辑层,屏蔽了底层磁盘布局,便于动态调整磁盘容量来提高磁盘分区管理的灵活性。它可以将一个或多个底层块设备组织成一个逻辑设备的卷组,管理员可以在卷组上随意创建逻辑卷组(logical volumes),并进一步在逻辑卷组上创建文件系统,管理员通过LVM可以方便的调整存储卷组的大小,并且可以对磁盘存储按照组的方式进行命名、管理和分配

(2)LVM 基本术语:

 (a)物理存储介质(PhysicalStorageMedia):            指系统上最底层的物理存储设备:磁盘,例如:/dev/sda、/dev/sdb等(b)物理卷(Physical Volume, PV):       指磁盘、磁盘分区或RAID设备,使用LVM前需要先将之制作成便于识别的物理卷PV(c)卷组(Volume Group, VG):         卷组由一个或多个物理卷PV组成,在卷组之上可创建一个或多个逻辑卷LV。卷组VG类似于非LVM系统的 物理磁盘(d)逻辑卷(Logical Volume, LV):        建立在卷组VG之上,相当于逻辑分区,可在逻辑卷LV上进行一系列操作(例如:格式化、挂载等)。 逻辑卷LV类似于非LVM系统的磁盘分区(d)物理扩展块(Physical Extent, PE):        当物理卷PV加入某一卷组VG后即被划分为基本单元PE,PE是LVM寻址的最小单元。PE的大小是可配置的,默认为4M。(e)逻辑扩展块(Logical Extent, LE):        卷组VG将PE划分给逻辑卷LV,在逻辑卷LV中的PE称为LE。在同一卷组VG中,PE和LE大小相同,且相互对应。LE也是LVM的最小寻址单位。

(3)LVM基本操作:
(a)pv管理工具:

pvs:简要pv信息显示pvdisplay:显示pv的详细信息pvcreate /dev/DEVICE: 创建pv

(b)vg管理工具:

vgsvgdisplayvgcreate  [-s #[kKmMgGtTpPeE]] VolumeGroupName  PhysicalDevicePath [PhysicalDevicePath...]vgextend  VolumeGroupName  PhysicalDevicePath [PhysicalDevicePath...]vgreduce  VolumeGroupName  PhysicalDevicePath [PhysicalDevicePath...]先做pvmovevgremove

(c)lv管理工具:

lvslvdisplaylvcreate -L #[mMgGtT] -n NAME VolumeGroupvremove /dev/VG_NAME/LV_NAME

(d)扩展逻辑卷:

    # lvextend -L [+]#[mMgGtT] /dev/VG_NAME/LV_NAME    # resize2fs /dev/VG_NAME/LV_NAME(e)缩减逻辑卷:    # umount /dev/VG_NAME/LV_NAME# e2fsck -f /dev/VG_NAME/LV_NAME    # resize2fs /dev/VG_NAME/LV_NAME #[mMgGtT]    # lvreduce -L [-]#[mMgGtT] /dev/VG_NAME/LV_NAME    # mount
0