文件系统分区及磁盘管理

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基本应用及扩展缩减实现

待补充

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值