1.描述GPT是什么,如何使用
Linux的文件系统分区结构一般有2种,MBR和GPT
MBG,Master Boot Record,主引导记录
- MBR是位于磁盘最前边的一段引导(Loader)代码,在磁盘的0磁道0扇区。它负责磁盘操作系统对磁盘进行读写时分区合法性的判别、分区引导信息的定位,它由磁盘操作系统在对硬盘进行初始化时产生的。
- MBR所在扇区大小为512bytes,专门用来存储MBR,MBR分为三部分:引导代码、MBR分区表、MBR结束标志 引导代码:占MBR分区的前446字节,负责整个系统启动。如果引导代码被破坏,系统将无法启动。 MBR分区表:引导代码后的64个字节,是整个硬盘的分区表。有四张分区表 MBR结束标志:占MBR扇区最后2个字节,值为“55 AA”
扩展分区
由于MBR仅仅为分区表保留了64字节的存储空间,而每个分区则占用16字节的空间,也就是只能分4个分区,而4个分区在实际情况下往往是不够用的,因此就有了扩展分区.
- 扩展分区中的每个逻辑分区的分区信息都存在一个类似MBR的扩展引导记录(简称EBR)中,扩展引导记录包括分区表和结束标志“55 AA”,没有引导代码部分。也就是EBR中的前446个字节是空的。
- EBR中分区表的第一项描述第一个逻辑分区,第二项指向下一个逻辑分区的EBR。如果下一个逻辑分区不存在,第二项就不需要了。 需要注意的是,当磁盘容量超过2T的时候,现在的MBR机制是没办法识别2T以后的磁盘空间的,此时就需要使用GPT机制来进行分区。
GPT
GPT磁盘分区结构解决了MBR只能分4个主分区的的缺点,理论上说,GPT磁盘分区结构对分区的数量好像是没有限制的。但某些操作系统可能会对此有限制。
- 保护MBR 保护MBR位于GPT磁盘的第一扇区,也就是0号扇区,有磁盘签名,MBR磁盘分区表和结束标志组成,没有引导代码。而且分区表内只有一个分区表项,这个表项GPT根本不用,只是为了让系统认为这个磁盘是合法的。
- GPT头 GPT头位于GPT磁盘的第二个扇区,也就是1号扇区,该扇区是在创建GPT磁盘时生成,其作用是定义分区表的位置和大小。GPT头还包含头和分区表的校验和,这样就可以及时发现错误。
- 分区表 分区表位于GPT磁盘的2-33号扇区,一共占用32个扇区,能够容纳128个分区表项。每个分区表项大小为128字节。因为每个分区表项管理一共分区,所以允许GPT磁盘创建128个分区。 每个分区表项中记录着分区的起始,结束地址,分区类型的GUID,分区的名字,分区属性和分区GUID。
- 分区区域 GPT分区区域就是用户使用的分区,也是用户进行数据存储的区域。分区区域的起始地址和结束地址由GPT分区表定义。
- GPT头备份 GPT头有一个备份,放在GPT磁盘的最后一个扇区,但这个GPT头备份并非完全GPT头备份,某些参数有些不一样。复制的时候根据实际情况更改一下即可。
- 分区表备份 分区区域结束后就是分区表备份,其地址在GPT头备份扇区中有描述。分区表备份是对分区表32个扇区的完整备份。如果分区表被破坏,系统会自动读取分区表备份,也能够保证正常识别分区。
GPT的分区结构相对于MBR要简单许多,并且分区表以及GPT头都有备份。
GPT的使用
[root@centos7 ~]#parted /dev/sda
GNU Parted 3.1
Using /dev/sda
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted)
- align-check TYPE N 检查分区N的类型(最小|opt)是否对齐
- help [COMMAND] 打印一般帮助,或按命令打印帮助
- mklabel,mktable LABEL-TYPE 创建一个新的磁盘标签(分区表)
- mkpart PART-TYPE [FS-TYPE] START END 做一个分区
- name NUMBER NAME 将分区号作为名称
- print [devices|free|list,all|NUMBER] 显示分区表、可用设备、空闲空间、所有找到的分区或特定的分区
- quit 退出程序
- rescue START END 在开始和结束附近挽救丢失的分区
- resizepart NUMBER END 调整分区号
- rm NUMBER 删除分区号
- select DEVICE 选择要编辑的设备
- disk_set FLAG STATE 更改选定设备上的标志
- disk_toggle [FLAG] 切换选定设备上的标志状态
- set NUMBER FLAG STATE 更改分区号上的标志
- toggle [NUMBER [FLAG]] 切换分区号上的标志状态
- unit UNIT 将默认单元设置为单元
创建GPT分区步骤 1、使用parted工具:parted /dev/sdb 2、输入:mklabel gpt 切换分区模式,print查看是否成功 3、输入:mkpart
创建一个10G的分区,并格式化为ext4文件系统。
[root@centos7 ~]#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.
Device does not contain a recognized partition table
Building a new DOS disklabel with disk identifier 0xc5f2d556.
Command (m for help): n
Partition type:
p primary (0 primary, 0 extended, 4 free)
e extended
Select (default p): p
Partition number (1-4, default 1): 1
First sector (2048-20971519, default 2048):
Using default value 2048
Last sector, +sectors or +size{K,M,G} (2048-20971519, default 20971519):
Using default value 20971519
Partition 1 of type Linux and of size 10 GiB is set
Command (m for help): w
The partition table has been altered!
Calling ioctl() to re-read partition table.
Syncing disks.
[root@centos7 ~]#
[root@centos7 ~]#fdisk -l
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: 0xc5f2d556
Device Boot Start End Blocks Id System
/dev/sdb1 2048 20971519 10484736 83 Linux
[root@centos7 ~]#mkfs.ext4 /dev/sdb1
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
655360 inodes, 2621184 blocks
131059 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=2151677952
80 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632
Allocating group tables: done
Writing inode tables: done
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done
[root@centos7 ~]#
要求
(1)block大小为2048,预留空间20%,卷标为MYDATA
mke2fs -b 2048 -t ext4 -m 20 -L MYDATA /dev/sdb1
(2)挂载至/mydata目录,要求挂载时禁止程序自动运行,且不更新文件的访问时间戳
[root@centos7 ~]#mount -o noexec -o noatime /dev/sdb1 /mydata
[root@centos7 ~]#mount | grep sdb
/dev/sdb1 on /mydata type ext4 (rw,noexec,noatime,seclabel,data=ordered)
[root@centos7 ~]#
(3)可开机自动挂载
[root@centos7 ~]#vim /etc/fstab
LABEL='MYDATA' /mydata ext4 noexec,noatime 0 0
创建一个大小为1G的swap分区,并启用
[root@centos7 ~]#fdisk /dev/sdb
Command (m for help): n
Command (m for help): t
Selected partition 1
Hex code (type L to list all codes): 82
Changed type of partition 'Linux' to 'Linux swap / Solaris'
Command (m for help): w
The partition table has been altered!
Calling ioctl() to re-read partition table.
Syncing disks.
[root@centos7 ~]#
[root@centos7 ~]#mkswap /dev/sdb1
mkswap: /dev/sdb1: warning: wiping old ext4 signature.
Setting up swapspace version 1, size = 1048572 KiB
no label, UUID=11ef8a8c-bd90-4a92-9c2c-e97301b0c537
[root@centos7 ~]#cat /proc/meminfo | grep SwapTotal
SwapTotal: 4194300 kB
[root@centos7 ~]#swapon /dev/sdb1
[root@centos7 ~]#cat /proc/meminfo | grep SwapTotal
SwapTotal: 5242872 kB
[root@centos7 ~]#
编写脚本计算/etc/passwd文件中第10个用户和第20个用户id号之和
#!/bin/bash
#
uid10=$(head -10 /etc/passwd | tail -1 | cut -d: -f3)
uid20=$(head -20 /etc/passwd | tail -1 | cut -d: -f3)
sumuid=$[$uid10+$uid20]
echo "User No.10 and No.20 uidsum="$sumuid
#!/bin/bash
#
hostname=$(hostname)
if [ -z "$hostname" -o "$hostname" == "localhost.localdomain" ]; then
echo "hostname is wrong. Change it."
hostname www.magedu.com
else
echo "hostname is right."
fi
编写脚本,通过命令行参数传入一个用户名,判断id号是偶数还是奇数
#!/bin/bash
#
if [ $# -lt 1 ]; then
echo "At least one username"
exit 1
fi
judgeuid=$(id $1)
if [ $? != 0 ]; then
echo "No such user."
exit 2
fi
uid=$(id -u $1)
if [ $[$uid%2] -eq 0 ]; then
echo $1" uid is Even number."
else
echo $1" uid is Odd number."
fi
lvm基本应用及扩展缩减实现
待补充