4.磁盘文件系统实践及shell编程进阶

1、描述GPT是什么,应该怎么使用。
定义:
GPT(GUID Partition Table)中文名称叫做全局唯一标识分区表。它和MBR分区的区别就是引导方式和分区结构的不同;支持硬盘分区的容量不同,MBR分区结构最高支持到2T硬盘,2T及以上分区就需要GPT分区结构;MBR分区直接存储数据和引导记录,GPT分区的数据和引导记录是分开存储的,并且理论上支持无限量的分区;GPT在win10系统中可以支持128个分区,最高可以管理18EB的磁盘。win10操作系统可以UEFI启动,也可以MBR启动;
使用:
1. gdisk 创建GPT分区
2.partprobe 重新设置内存中的内核分区表版本
3.gdisk 管理GPT分区
4.cat /proc/partations 查看内核是否已经识别新的分区

2、创建一个10G的分区,并格式化为ext4文件系统。要求:(1) block大小为2048,预留空间20%,卷标为 MYDATA,(2)挂载至/mydata目录,要求挂载时禁止程序自动运行,且不更新文件的访问时间戳。(3)可开机自动挂载。
(1)创建一个10G的分区

[root@localhost centos]# fdisk /dev/sdb
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): p

Disk /dev/sdb: 10.7 GB, 10737418240 bytes, 20971520 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x9cb989a7

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1            2048    10000000     4998976+  83  Linux

(2)创建文件系统

[root@localhost centos]# mke2fs -t ext4 -L 'MYDATA' -b 2048 -m 20 /dev/sdb1
mke2fs 1.42.9 (28-Dec-2013)
Filesystem label=MYDATA
OS type: Linux
Block size=2048 (log=1)
Fragment size=2048 (log=1)
Stride=0 blocks, Stripe width=0 blocks
313344 inodes, 2499488 blocks
499897 blocks (20.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=271056896
153 block groups
16384 blocks per group, 16384 fragments per group
2048 inodes per group
Superblock backups stored on blocks: 
        16384, 49152, 81920, 114688, 147456, 409600, 442368, 802816, 1327104, 
        2048000

Allocating group tables: done                            
Writing inode tables: done                            
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done   

(3)创建目录,设置相关权限并挂载

[root@localhost centos]# mkdir /mydata
[root@localhost centos]# mount -o noatime,nodiratime,noexec /dev/sdb1 /mydata/        
[root@localhost centos]# cat /proc/mounts 
/dev/sdb1 /mydata ext4 rw,seclabel,noexec,noatime,nodiratime,data=ordered 0 0

(4)设置开机自动挂载

[root@localhost centos]# vim /etc/fstab 

#
# /etc/fstab
# Created by anaconda on Tue Feb 25 16:44:28 2020
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
/dev/mapper/centos-root /                       xfs     defaults        0 0
UUID=4c3372aa-71ea-4cce-b00b-898e57ba3576 /boot                   xfs     defaults        0 0
/dev/mapper/centos-home /home                   xfs     defaults        0 0
/dev/mapper/centos-swap swap                    swap    defaults        0 0
/dev/sdb1       /mydate         ext4    defaults,noatime,nodiratime,noexec      0 0
~                                                                                                     
~         

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

[root@localhost centos]# fdisk /dev/sdb      
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): p

Disk /dev/sdb: 10.7 GB, 10737418240 bytes, 20971520 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x9cb989a7

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1            2048     4196351     2097152   83  Linux
/dev/sdb2         4196352     8390655     2097152   82  Linux swap / Solaris

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.

[root@localhost centos]# mkswap /dev/sdb2		#创建1G的swap分区
Setting up swapspace version 1, size = 2097148 KiB
no label, UUID=0f51f14e-0126-4b4c-a9e4-673c6b8f8e48

[root@localhost centos]# swapon /dev/sdb2		#启用swap分区

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

#!/bin/bash
[ "$#" -ne 2 ] && echo "the arg number is not 2" && exit                  判断参数是否是两个
[[ ! "$1" =~ ^[[:digit:]]+$ ]] && echo "$1 is not number" && exit          判断两个参数是否是数字
[[ ! "$2" =~ ^[[:digit:]]+$ ]] && echo "$2 is not number" && exit
uid1=`head -n $1 /etc/passwd |cut -d: -f3 |tail -n 1`                     获取两个参数
uid2=`head -n $2 /etc/passwd |cut -d: -f3 |tail -n 1`
let sum=uid1+uid2
echo $sum

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

#!/bin/bash
hostName=$hostname
[ -z "$hostName"  -o  "$hostName" == "localhost.localdomain" ] && hostName="www. magedu. com"

6、编写脚本,通过命令行参数传入一个用户名,判断id号是偶数还是奇数。

#!/bin/bash
#
[ $# -lt 1 ] && echo "at leaset one args" && exit
! id $1 &> /dev/null && echo "no users" && exit
userid=$(id -u $1)
if [ $[$userid%2] -eq 0 ]; then
        echo "the user id is even number!"
else
        echo "the user id is odd number!"
fi

7、LVM基本应用以及扩展缩减实现。
基本应用:
(1)允许对卷进行方便操作的抽象层,包括重新设定文件系统的大小
(2)允许在多个物理设备间重新组织文件系统 :
将设备指定为物理卷
用一个或者多个物理卷来创建一个卷组
物理卷是用固定大小的物理区域(Physical Extent,PE)来定义的
在物理卷上创建的逻辑卷 是由物理区域(PE)组成
可以在逻辑卷上创建文件系统

扩展缩减实现:

(1)创建PV,VG,LV
[root@localhost centos]# fdisk /dev/sdb		#创建分区,并改为lvm类型
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): p

Disk /dev/sdb: 10.7 GB, 10737418240 bytes, 20971520 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x9cb989a7

  Device Boot      Start         End      Blocks   Id  System
/dev/sdb1            2048     4196351     2097152   83  Linux
/dev/sdb2         4196352    20971519     8387584    5  Extended
/dev/sdb5         4198400     6295551     1048576   8e  Linux LVM
/dev/sdb6         6297600     8394751     1048576   8e  Linux LVM
/dev/sdb7         8396800    10493951     1048576   8e  Linux LVM
/dev/sdb8        10496000    12593151     1048576   8e  Linux LVM

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.

[root@localhost centos]# partprobe            
Warning: Unable to open /dev/sr0 read-write (Read-only file system).  /dev/sr0 has been opened read-only.

[root@localhost centos]# ls /dev/sdb*
/dev/sdb  /dev/sdb1  /dev/sdb2  /dev/sdb5  /dev/sdb6  /dev/sdb7  /dev/sdb8

[root@localhost centos]# pvcreate /dev/sdb{5,6}			#以sdb5,6创建为PV物理卷
 Physical volume "/dev/sdb5" successfully created.
 Physical volume "/dev/sdb6" successfully created.
 
[root@localhost centos]# vgcreate -s 16M myvg /dev/sdb{5,6}  	#创建myvg卷组
 Volume group "myvg" successfully created
 
[root@localhost centos]# lvcreate -n mylv -L 1.5G myvg		#创建1.5G的逻辑卷mylv
 Logical volume "mylv" created.
 
[root@localhost centos]# lvs		#查看确认创建成功
 LV   VG     Attr       LSize  Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
 home centos -wi-ao----  7.80g                                                    
 root centos -wi-ao---- 10.00g                                                    
 swap centos -wi-ao----  2.00g                                                    
 mylv myvg   -wi-a-----  1.50g   		                 
                                
[root@localhost centos]# mke2fs /dev/myvg/mylv 		#在创建的逻辑卷上创建ext2文件系统
mke2fs 1.42.9 (28-Dec-2013)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
98304 inodes, 393216 blocks
19660 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=402653184
12 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks: 
       32768, 98304, 163840, 229376, 294912

Allocating group tables: done                            
Writing inode tables: done                            
Writing superblocks and filesystem accounting information: done 

[root@localhost lvm]# mount /dev/myvg/mylv /mnt/lvm		#将创建好的文件系统挂载到 /mnt/lvm目录下
[root@localhost lvm]# cp /etc/fstab ./			#复制/etc/fstab  文件到该逻辑卷上,看能否正常打开
[root@localhost lvm]# ls
fstab
[root@localhost lvm]# cat fstab 		#文件正常打开,说明创建成功
#
# /etc/fstab
# Created by anaconda on Tue Feb 25 16:44:28 2020
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
/dev/mapper/centos-root /                       xfs     defaults        0 0
UUID=4c3372aa-71ea-4cce-b00b-898e57ba3576 /boot                   xfs     defaults        0 0
/dev/mapper/centos-home /home                   xfs     defaults        0 0
/dev/mapper/centos-swap swap                    swap    defaults        0 0
(2)lvm的扩展
[root@localhost lvm]# pvcreate /dev/sdb7		#创建PV物理块sdb7
 Physical volume "/dev/sdb7" successfully created.
 
[root@localhost lvm]# pvs
 PV         VG     Fmt  Attr PSize    PFree  
 /dev/sda2  centos lvm2 a--    19.80g      0 
 /dev/sdb5  myvg   lvm2 a--  1008.00m      0 
 /dev/sdb6  myvg   lvm2 a--  1008.00m 480.00m
 /dev/sdb7         lvm2 ---     1.00g   1.00g

[root@localhost lvm]# vgextend myvg /dev/sdb7       #扩展myvg
 Volume group "myvg" successfully extended
 
[root@localhost lvm]# vgs			#发现pv由原来的两个分区变成了3个分区
 VG     #PV #LV #SN Attr   VSize  VFree
 centos   1   3   0 wz--n- 19.80g    0 
 myvg     3   1   0 wz--n-  2.95g 1.45g	
 
[root@localhost lvm]# lvextend  -r -L +1G /dev/myvg/mylv 				#将mylv扩展增加1G,由原来的1.5G增加至2.5G
 Size of logical volume myvg/mylv changed from 1.50 GiB (96 extents) to 2.50 GiB (160 extents).
 Logical volume myvg/mylv successfully resized.
resize2fs 1.42.9 (28-Dec-2013)
Filesystem at /dev/mapper/myvg-mylv is mounted on /mnt/lvm; on-line resizing required
old_desc_blocks = 1, new_desc_blocks = 1
The filesystem on /dev/mapper/myvg-mylv is now 655360 blocks long.

[root@localhost lvm]# lvs
 LV   VG     Attr       LSize  Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
 home centos -wi-ao----  7.80g                                                    
 root centos -wi-ao---- 10.00g                                                    
 swap centos -wi-ao----  2.00g                                                    
 mylv myvg   -wi-ao----  2.50g                                                    
(3)lvm的缩减
[root@localhost lvm]# umount /dev/myvg/mylv 		#先卸载lvm

[root@localhost lvm]# fsck -f /dev/myvg/mylv		#检测文件系统
fsck from util-linux 2.23.2
e2fsck 1.42.9 (28-Dec-2013)
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
/dev/mapper/myvg-mylv: 11/163840 files (0.0% non-contiguous), 10868/655360 blocks

[root@localhost lvm]# resize2fs /dev/myvg/mylv 1.5G	#缩减文件系统至1.5G
resize2fs 1.42.9 (28-Dec-2013)
resize2fs: Invalid new size: 1.5G

[root@localhost lvm]# lvreduce -L 1.5G /dev/myvg/mylv 		#缩减lv至1.5G
 WARNING: Reducing active logical volume to 1.50 GiB.
 THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce myvg/mylv? [y/n]: y
 Size of logical volume myvg/mylv changed from 2.50 GiB (160 extents) to 1.50 GiB (96 extents).
 Logical volume myvg/mylv successfully resized.
 
[root@localhost lvm]# mount /dev/myvg/mylv /mnt/lvm		#此时重新挂载有可能会出现文件系统格式错误的情况
mount: wrong fs type, bad option, bad superblock on /dev/mapper/myvg-mylv,
      missing codepage or helper program, or other error

      In some cases useful info is found in syslog - try
      dmesg | tail or so.
      
[root@localhost lvm]# mke2fs /dev/myvg/mylv 		#我们需要重新对文件系统进行格式化
mke2fs 1.42.9 (28-Dec-2013)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
98304 inodes, 393216 blocks
19660 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=402653184
12 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks: 
       32768, 98304, 163840, 229376, 294912

Allocating group tables: done                            
Writing inode tables: done                            
Writing superblocks and filesystem accounting information: done 

[root@localhost lvm]# mount /dev/myvg/mylv /mnt/lvm		#格式化后重新挂载,没有问题
[root@localhost lvm]# ls
fstab
[root@localhost lvm]# cat fstab 			#查看里面的文件也没有问题

#
# /etc/fstab
# Created by anaconda on Tue Feb 25 16:44:28 2020
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
/dev/mapper/centos-root /                       xfs     defaults        0 0
UUID=4c3372aa-71ea-4cce-b00b-898e57ba3576 /boot                   xfs     defaults        0 0
/dev/mapper/centos-home /home                   xfs     defaults        0 0
/dev/mapper/centos-swap swap                    swap    defaults        0 0

[root@localhost lvm]# lvs				#myvg已缩减至1.5G
 LV   VG     Attr       LSize  Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
 home centos -wi-ao----  7.80g                                                    
 root centos -wi-ao---- 10.00g                                                    
 swap centos -wi-ao----  2.00g                                                    
 mylv myvg   -wi-ao----  1.50g   

[root@localhost lvm]# df -h
Filesystem               Size  Used Avail Use% Mounted on
/dev/sda1                197M  157M   41M  80% /boot
tmpfs                    182M   12K  182M   1% /run/user/42
tmpfs                    182M     0  182M   0% /run/user/1000
/dev/mapper/myvg-mylv    1.5G  2.3M  1.4G   1% /mnt/lvm
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值