文件系統分區及磁盤管理

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

待補充

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章