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基本應用及擴展縮減實現
待補充