码迷,mamicode.com
首页 > 系统相关 > 详细

Linux文件系统介绍

时间:2018-12-09 22:09:14      阅读:247      评论:0      收藏:0      [点我收藏+]

标签:read   时间戳   西部数据   etc   center   ext4文件系统   计算   兼容性   引导程序   

GPT描述

全局唯一标识分区表(GUID Partition Table,缩写:GPT)是硬盘的分区表的结构布局标准。它是可扩展固件接口(EFI)标准(被Intel用于替代个人计算机的BIOS)的一部分,被用于替代BIOS系统中的32bits来存储逻辑块地址和大小信息的主引导记录(MBR)分区表。对于那些扇区为512字节的磁盘,MBR分区表不支持容量大于2.2TB的分区,然而一些硬盘制造商(诸如希捷和西部数据)注意到这个局限性,并且将他们的容量较大的磁盘升级到4KB的扇区,这意味着UBR的有效容量上升到16TB。这个看似“正确”的解决方案,在临时地降低人们对改进磁盘分配表的需求的同时,也给市场带来关于在有较大的块(block)的设备上从BIOS启动时,如何最佳的划分磁盘分区的困惑。GPT分配64bit给逻辑块地址,因而使得最大分区大小在2^64-1个扇区成为可能。而于每个扇区大小为512字节的磁盘,意味着可以有9.4ZB或8ZB个512字节个扇区。
截止2010年,大多数操作系统对BPT均有支持,尽管包括Mac OS和Windows在内的一些仅在EFI基础上自GPT分区启动。

特点

在MBR硬盘中,分区信息直接存储于主引导记录(MBR)中(主引导记录中还存储着系统的引导程序)。但在GPT硬盘中,分区表的位置信息存储在GPT头中。但出于兼容性考虑,硬盘的第一个扇区仍然用作MBR,之后才是GPT头。
跟现代的MBR一样,GPT也使用逻辑区块地址(LBA)取代了早期的CHS寻址方式。传统MBR信息存储于LBA0,GPT存储于LBA1,接下来才是分区表本身。64位Windows系统使用16,384字节(或32扇区)作为GPT分区表,接下来的LBA34是硬盘上第一个分区的开始。
使用英物尔架构的苹果机也使用GPT。
为了减少分区表损坏的风险,GPT在硬盘最后保存了一份分区表的副本。

传统MBR(LBA0)

在GPT分区表的最开关,出于兼容性考虑仍然存储了一份传统的MBR,用来防止不支持GPT的硬盘管理工具错误识别并破坏硬盘中的数据,这个MBR也叫做保护MBR。在支持从GPT启动的操作系统中,这里也用于存储第一阶段的启动代码。在这个MBR中,只有一个标识为0xEE的分区,以此来表示这块硬盘使用GPT分区表。不能识别GPT硬盘的操作系统通常会识别出一个未知类型的分区,并且拒绝对硬盘进行操作,除非用户特别要求删除这个分区。这就避免了意外删除分区的危险。另外能够识别GPT分区表的操作系统会检查保护MBR中的分区表,如果分区类型不是0xEE或者MBR分区表中有多个项,也会拒绝对硬盘进行操作。
在使用MBR/GPT混合分区表的硬盘中,这部分存储了GPT分区表的一部分分区(通常是前四个分区),可以使用不支持从GPT启动的操作系统从这个MBR启动,启动后只能操作MBR分区表中的分区。如Boot Camp就是这种方式启动Windows。

分区表头(LBA1)

分区表头定义了硬盘的可用空间以及组成分区表的项的大小和数量。在使用64位Windows Server 2003的机器上,最多可以创建128个分区,即分区表中保留了128个项,其中每个都是128字节。(EFI标准要求分区表最小要有16384字节,即128个分区项的大小)
分区表头还记录了这块硬盘的GUID,记录了分区表头本身的位置和大小(位置总是在LBA1)以及备份分区表头和分区表的位置和大小(在硬盘的最后)。它还存储着它本身和分区表的CRC32校验。固件、引导程序和操作系统在启动时可以根据这个校验值来判断分区表是否出错,如果出错了,可以使用软件从硬盘最后的GPT中恢复整个分区表,如果GPT也校验错误,硬盘将不可使用。所以GPT硬盘的分区表不可以直接使用16进制编辑器修改。

分区表头的格式
起始字节 长度 内容
0 8字节 签名("EFI PART",45 45 49 20 50 41 52 54 )
8 4字节 修订(在1.0版中,值是00 00 01 00 )
12 4字节 分区表头的大小(单位是字节,通常是92字节,即5C 00 00 00 )
16 4字节 分区表头(第0-91字节)的CRC32校验,在计算时,把这个字段作为0处理,需要计算出分区序列的CRC32校验后再计算本字字段
20 4字节 保留,必须是0
24 8字节 当前LBA(这个分区表头的位置)
32 8字节 备份LBA(另一个分区表头的位置)
40 8字节 第一个可用于分区的LBA(主分区表的最后一个LBA+1)
48 8字节 最后一个可用于分区的LBA(备份分区表的第一个LBA-1)
56 16字节 硬盘GUID(在类UNIX系统中也叫UUID)
72 8字节 分区表项的起始LBA(在主分区表中是2)
80 4字节 一个分区表项的大小(通常是128)
88 4字节 分区序列的CRC32校验
92 * 保留,剩余的字节必须是0(对于512字节LBA的硬盘即是420个字节)

主分区和备份分区表的头分别位于硬盘的第二个扇区(LBA1)以及最后一个扇区。备份分区表头中的信息是关于备份分区表的。

分区表项(LBA2-33)

GPT分区表使用简单而直接的方式表示分区。一个分区表项的前16字节是分区类型GUID。例如,EFI分区的GUID类型是{C12A7328-F81F-11D2-BA4B-00A0C93EC93B}。接下来的16字节是该分区唯一的GUID(这个GUID指的是该分区本身,而之前的GUID指的是该分区的类型。再接下来是分区起始和末尾的64位LBA编号,以及分区的名字和属性)。

GPT分区表项的格式

起始字节 | 长度 | 内容
--- | --- | ---

起始字节 长度 内容
0 16字节 分区类型GUID
16 16字节 分区GUID
32 8字节 起始LBA(小端序)
40 8字节 末尾LBA
48 8字节 属性标签(如:60表示“只读”)
56 72字节 分区名(可以包括36个UTF-16(小端序)字符)

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

要求:
1.block大小为2048,预留空间20%,卷标为MYDATA。

mkfs.ext4 -b 2048 -L MYDATA -m 20 /dev/sdb1

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

mount -o noexec,nodiratime /dev/sdb1 /mydata

3.可开机自动挂载

echo "/dev/sdb1 /mydata ext4    (noexec,nodirtime) 0 0 " >> /etc/fstab

创建一个大小为1G的swap分区,并启动

fdisk /dev/sdb  
n  
p  
2  

+1G  
t  
82  
w  
partprobe  
mkswap /dev/sdb2  
swapon -a /dev/sdb2

计算/etc/passwd文件中第10个用户和第20个用户id号之和

awk -F‘:‘ ‘BEGIN{sum=0} {if(NR==10 || NR==20) sum+=$3}  END { print sum}‘ /etc/passwd

脚本实现接受一个用户名输入,判断id号是奇数还是偶数

#!/bin/bash
#description:接受一个用户名,判断id号是奇数或者偶数并输出
#如果输入q或者quit程序退出

read -p "请输入一个用户名:"  USERNAME

while true;do
    USERID=$(id -u $USERNAME)
    echo $USERID
    if [[ $USERNAME == "q" || $USERNAME == "quit" ]];then
    echo "bye..."
    exit 0
    elif [[ $(($USERID%2)) -eq 0 ]] ; then
    echo "$USERNAME‘s id is even"
    else [[ $(($USERID%2)) -eq 1 ]] 
    echo "$USERNAME‘s id is odd"
    fi

read -p "请再输入一个用户名:"  USERNAME
done

Linux文件系统介绍

标签:read   时间戳   西部数据   etc   center   ext4文件系统   计算   兼容性   引导程序   

原文地址:https://www.cnblogs.com/feng-land/p/10093454.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!