1. 程式人生 > >Linux基礎知識之磁碟管理

Linux基礎知識之磁碟管理

1、描述GPT是什麼,應該怎麼使用。

    早期磁碟第一個扇區裡面含有的重要資訊我們稱為 MBR (Master Boot Record) 格式,但是由於近年來磁碟的容量不斷擴大,造成讀寫上的一些困擾, 甚至有些大於 2TB 以上的磁碟分割槽已經讓某些作業系統無法存取。因此後來又多了一個新的磁碟分割槽格式,稱為 GPT (GUID partitiontable)! 這兩種分割槽格式與限制不太相同。

    因為過去一個扇區大小就是 512bytes 而已,不過目前已經有 4K 的扇區設計出現!為了兼容於所有的磁碟,因此在扇區的定義上面, 大多會使用所謂的邏輯區塊地址(Logical Block Address, LBA)來處理。GPT 將磁碟所有區塊以此 LBA(預設為 512bytes 喔!) 來規劃,而第一個 LBA 稱為 LBA0 (從0 開始編號)。與 MBR 僅使用第一個 512bytes 區塊來紀錄不同, GPT 使用了 34 個 LBA 區塊來紀錄分割槽資訊!同時與過去 MBR 僅有一的區塊,被幹掉就死光光的情況不同, GPT 除了前面 34 個 LBA 之外,整個磁碟的最後 33 個 LBA 也拿來作為另一個備份!

blob.png

2、建立一個10G的分割槽,並格式化為ext4檔案系統。要求:

(1)block大小為2048,預留空間20%,卷標為MYDATA,

(2)掛載至/mydata目錄,要求掛載時禁止程式自動執行,且不更新檔案的訪問時間戳。

(3)可開機自動掛載。

1、格式化一塊10G的磁碟空間出來
        fdisk /dev/sda
        n
        1
        p
        預設起始
        +10G
    2、建立為ext4的檔案系統
        mke2fs -t ext4 -b 2048 -L MYDATA -m 2 /dev/sda1
    3、修改預設掛載屬性包含acl
        tune2fs -o acl /dev/sda1
    4、掛載至/data/mydata
        mkdir -p /data/mydata
        amount -o noexec noatime /data/mydata /dev/sda1
        開機自動掛載:
            在/etc/fstab中新增一行
            LALEL=MYDATA /data/mydata ext4 defaults,acl,noexec,noatime 0 0

3、建立一個大小為1G的swap分割槽,並啟用。

1、先格式化一塊1G的磁碟分割槽
        fdisk /dev/sda
        n
        2
        p
        預設起始值
        +1G
        調整磁碟型別為swap可用
        t
        82
        w
    2、重讀分割槽
        kpartx -af /dev/sda
    3、建立swap檔案系統
        (1)、臨時
            mkswap /dev/sda3
            swapon /dev/sda3
        (2)、開機啟動掛載
            編輯/etc/fstab,增加
            /dev/sda3 swap swap defaults 0 0

4、編寫指令碼計算/etc/passwd檔案中第10個使用者和第20個使用者id號之和。

[[email protected] ~]# cat useridadd.sh
#!/bin/bash
#
num1=$(head -10 /etc/passwd | tail -1 | cut -d: -f3)
num2=$(head -20 /etc/passwd | tail -1 | cut -d: -f3)

sum=$(($num1+$num2))

echo $sum

5、將當前主機名儲存至hostName變數中,主機名如果為空,或者為localhost.localdomain則將設定為www.magedu.com。

hostName=$(hostname)

[ -z "$hostName" -o "$hostName" == "localhost.localdomain" ] && hostname www.magedu.com

6、編寫指令碼,通過命令列引數傳入一個名戶名,判斷id號是偶數還是奇數。

[[email protected] scripts]# cat userid_odd.sh
#!/bin/bash
#
[ $# -ne 1 ] && echo "Input one Arg" && exit 2;

uid=$(id -u $1)

uid_yu=$(($uid % 2))

if [ $uid_yu -eq 0 ];then
	echo "$1的ID號為偶數"
else
	echo "$1的ID號為奇數"
fi

7、lvm基本應用以及擴充套件縮減實現。

    LVM是邏輯卷管理(Logical Volume Manager)的簡稱,它是一種更為靈活的磁碟分割槽管理機制。LVM是在磁碟分割槽和檔案系統之間新增的一層邏輯層,它為檔案系統遮蔽下層的磁碟分割槽佈局,向檔案系統提供一個抽象的儲存卷。通過LVM,Linux系統管理員可輕鬆地管理磁碟分割槽,如:既然LVM是建立在硬碟和分割槽之上的一層邏輯層,那麼可以將多個硬碟、多個分割槽或RAID組織起來構建成儲存卷組,作為一個儲存池;然後在這個儲存卷之上再將其劃分出一個或多個邏輯卷,Linux系統管理員可以對這個劃分出來的邏輯捲進行一系列操作(例如格式化、掛載等),可以將邏輯卷當做一個系統分割槽來對待,更重要的是,這個系統分割槽的大小還可以線上擴充套件或縮減。總的來說,LVM使得系統分割槽獨立於底層硬體。

wKioL1ioFHeBrdypAACNoQHXhBY068.png

    那麼LVM是如何做到支援系統分割槽線上擴容或縮容的?我們再梳理一下LVM的工作原理。要製作邏輯分割槽,首先需要將多個硬碟、多個分割槽或RAID製作成為便於識別的物理卷(PV, Physical Volume),將這些製作好的物理卷再構建成一個儲存池,我們把這個儲存池稱為卷組(VG, VolumeGroup),這是LVM的第一個邏輯層。在卷組這一層上再邏輯出一層邏輯卷(LV, LogicalVolume),這個邏輯卷LV可供使用者使用,例如格式化、掛載、儲存資料,相當於一個邏輯意義上的系統分割槽。而這個邏輯分割槽的空間大小取決於卷組VG的分配,因此邏輯卷LV的儲存空間不能超過其所屬卷組VG的總儲存空間。


LVM建立:

// 磁碟分割槽,模擬建立物理磁碟過程
[[email protected] ~]# fdisk /dev/sdb
歡迎使用 fdisk (util-linux 2.23.2)。

更改將停留在記憶體中,直到您決定將更改寫入磁碟。
使用寫入命令前請三思。


命令(輸入 m 獲取幫助):n
Partition type:
   p   primary (0 primary, 0 extended, 4 free)
   e   extended
Select (default p):
Using default response p
分割槽號 (1-4,預設 1):
起始 扇區 (2048-41943039,預設為 2048):
將使用預設值 2048
Last 扇區, +扇區 or +size{K,M,G} (2048-41943039,預設為 41943039):+3G
分割槽 1 已設定為 Linux 型別,大小設為 3 GiB

命令(輸入 m 獲取幫助):n
Partition type:
   p   primary (1 primary, 0 extended, 3 free)
   e   extended
Select (default p):
Using default response p
分割槽號 (2-4,預設 2):
起始 扇區 (6293504-41943039,預設為 6293504):
將使用預設值 6293504
Last 扇區, +扇區 or +size{K,M,G} (6293504-41943039,預設為 41943039):+4G
分割槽 2 已設定為 Linux 型別,大小設為 4 GiB

命令(輸入 m 獲取幫助):n
Partition type:
   p   primary (2 primary, 0 extended, 2 free)
   e   extended
Select (default p):
Using default response p
分割槽號 (3,4,預設 3):
起始 扇區 (14682112-41943039,預設為 14682112):
將使用預設值 14682112
Last 扇區, +扇區 or +size{K,M,G} (14682112-41943039,預設為 41943039):+2G
分割槽 3 已設定為 Linux 型別,大小設為 2 GiB

命令(輸入 m 獲取幫助):t
分割槽號 (1-3,預設 3):
Hex 程式碼(輸入 L 列出所有程式碼):8e
已將分割槽“Linux”的型別更改為“Linux LVM”

命令(輸入 m 獲取幫助):t
分割槽號 (1-3,預設 3):2
Hex 程式碼(輸入 L 列出所有程式碼):8e
已將分割槽“Linux”的型別更改為“Linux LVM”

命令(輸入 m 獲取幫助):t
分割槽號 (1-3,預設 3):1
Hex 程式碼(輸入 L 列出所有程式碼):8e
已將分割槽“Linux”的型別更改為“Linux LVM”

命令(輸入 m 獲取幫助):w
The partition table has been altered!

Calling ioctl() to re-read partition table.
正在同步磁碟。
[[email protected] ~]# fdisk /dev/sdb
歡迎使用 fdisk (util-linux 2.23.2)。

更改將停留在記憶體中,直到您決定將更改寫入磁碟。
使用寫入命令前請三思。


命令(輸入 m 獲取幫助):p

磁碟 /dev/sdb:21.5 GB, 21474836480 位元組,41943040 個扇區
Units = 扇區 of 1 * 512 = 512 bytes
扇區大小(邏輯/物理):512 位元組 / 512 位元組
I/O 大小(最小/最佳):512 位元組 / 512 位元組
磁碟標籤型別:dos
磁碟識別符號:0xc950dffb

   裝置 Boot      Start         End      Blocks   Id  System
/dev/sdb1            2048     6293503     3145728   8e  Linux LVM
/dev/sdb2         6293504    14682111     4194304   8e  Linux LVM
/dev/sdb3        14682112    18876415     2097152   8e  Linux LVM

命令(輸入 m 獲取幫助):q
// 建立PV
[[email protected] ~]# pvcreate /dev/sdb1
  Physical volume "/dev/sdb1" successfully created.
[[email protected] ~]# pvcreate /dev/sdb2
  Physical volume "/dev/sdb2" successfully created.
[[email protected] ~]# pvcreate /dev/sdb3
  Physical volume "/dev/sdb3" successfully created.
[[email protected] ~]# pvs
  PV         VG     Fmt  Attr PSize   PFree
  /dev/sda2  centos lvm2 a--  <19.00g    0
  /dev/sdb1         lvm2 ---    3.00g 3.00g
  /dev/sdb2         lvm2 ---    4.00g 4.00g
  /dev/sdb3         lvm2 ---    2.00g 2.00g
// 建立PE大小為12M,名稱為TESTvg的邏輯卷組
[[email protected] ~]# vgcreate -s 12M TESTvg /dev/sdb1 /dev/sdb2 /dev/sdb3
  Volume group "TESTvg" successfully created
[[email protected] ~]# vgs
  VG     #PV #LV #SN Attr   VSize   VFree
  TESTvg   3   0   0 wz--n-  <8.98g <8.98g
  centos   1   2   0 wz--n- <19.00g     0
// 建立大小為4G,名為TESTlv的邏輯分割槽
[[email protected] ~]# lvcreate -L 4G -n TESTlv TESTvg
  Rounding up size to full physical extent <4.01 GiB
  Logical volume "TESTlv" created.
[[email protected] ~]# lvs
  LV     VG     Attr       LSize   Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  TESTlv TESTvg -wi-a-----  <4.01g
  root   centos -wi-ao---- <17.00g
  swap   centos -wi-ao----   2.00g
// 格式化分割槽為ext4型別,並掛載到/users目錄下,將目錄/etc/pam.d 複製到/users目錄下
[[email protected]cdcjtx-centos-001 ~]# mkfs.ext4 /dev/TESTvg/TESTlv
mke2fs 1.42.9 (28-Dec-2013)
檔案系統標籤=
OS type: Linux
塊大小=4096 (log=2)
分塊大小=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
263472 inodes, 1053696 blocks
52684 blocks (5.00%) reserved for the super user
第一個資料塊=0
Maximum filesystem blocks=1080033280
33 block groups
32768 blocks per group, 32768 fragments per group
7984 inodes per group
Superblock backups stored on blocks:
        32768, 98304, 163840, 229376, 294912, 819200, 884736

Allocating group tables: 完成
正在寫入inode表: 完成
Creating journal (32768 blocks): 完成
Writing superblocks and filesystem accounting information: 完成

[[email protected] ~]# partprobe // 在不重新啟動機器的情況下系統能夠識別這些分割槽
[[email protected] ~]# mount /dev/TESTvg/TESTlv /users/
[[email protected] ~]# cp -R /etc/pam.d/ /users/
[[email protected] ~]# ls -l /users/
總用量 20
drwx------ 2 root root 16384 5月  13 16:27 lost+found
drwxr-xr-x 2 root root  4096 5月  13 16:29 pam.d

LVM擴充套件:

// 為TESTlv新增加2G容量,並驗證資料完整度

[[email protected] ~]# lvextend -L +2G /dev/TESTvg/TESTlv // 擴充套件物理邊界
  Rounding size to boundary between physical extents: 2.00 GiB.
  Size of logical volume TESTvg/TESTlv changed from <4.02 GiB (343 extents) to 6.02 GiB (514 extents).
  Logical volume TESTvg/TESTlv successfully resized.

[[email protected] ~]# resize2fs /dev/TESTvg/TESTlv // 擴充套件邏輯邊界
resize2fs 1.42.9 (28-Dec-2013)
Filesystem at /dev/TESTvg/TESTlv is mounted on /users; on-line resizing required
old_desc_blocks = 1, new_desc_blocks = 1
The filesystem on /dev/TESTvg/TESTlv is now 1579008 blocks long.

[[email protected] ~]# ls -l /users/ //資料校驗
總用量 20
drwx------ 2 root root 16384 5月  13 16:27 lost+found
drwxr-xr-x 2 root root  4096 5月  13 16:29 pam.d

LVM縮減:

// 將TESTlv縮減到2G大小,並校驗資料完整性!
// 這裡採用ext4作為檔案系統型別
// 先解除安裝物理檔案系統->檔案系統的強制檢測和修復->縮減邏輯邊界->縮減物理邊界->重新掛載

[[email protected] ~]# umount /dev/TESTvg/TESTlv // 解除安裝物理檔案系統

[[email protected] ~]# e2fsck -f /dev/TESTvg/TESTlv // 檔案系統的強制檢測和修復
e2fsck 1.42.9 (28-Dec-2013)
第一步: 檢查inode,塊,和大小
第二步: 檢查目錄結構
第3步: 檢查目錄連線性
Pass 4: Checking reference counts
第5步: 檢查簇概要資訊
/dev/TESTvg/TESTlv: 67/391216 files (0.0% non-contiguous), 61501/1579008 blocks

[[email protected] ~]# resize2fs /dev/TESTvg/TESTlv 2G // 縮減邏輯邊界為2G大小
resize2fs 1.42.9 (28-Dec-2013)
Resizing the filesystem on /dev/TESTvg/TESTlv to 524288 (4k) blocks.
The filesystem on /dev/TESTvg/TESTlv is now 524288 blocks long.

[[email protected] ~]# lvreduce -L 2G /dev/TESTvg/TESTlv // 縮減物理邊界為2G大小
  Rounding size to boundary between physical extents: 2.00 GiB.
  WARNING: Reducing active logical volume to 2.00 GiB.
  THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce TESTvg/TESTlv? [y/n]: y // 確認執行,注意風險性
  Size of logical volume TESTvg/TESTlv changed from 6.02 GiB (514 extents) to 2.00 GiB (171 extents).
  Logical volume TESTvg/TESTlv successfully resized.

[[email protected] ~]# mount /dev/TESTvg/TESTlv /users/ //重新掛載

[[email protected] ~]# ls -l /users/ //資料檢視
總用量 20
drwx------ 2 root root 16384 5月  13 16:27 lost+found
drwxr-xr-x 2 root root  4096 5月  13 16:29 pam.d

刪除LVM:

[[email protected] ~]# umount /users/

[[email protected] ~]# lvremove /dev/TESTvg/TESTlv
Do you really want to remove active logical volume TESTvg/TESTlv? [y/n]: y
  Logical volume "TESTlv" successfully removed

[[email protected] ~]# vgremove TESTvg
  Volume group "TESTvg" successfully removed

[[email protected] ~]# pvremove /dev/sdb1
  Labels on physical volume "/dev/sdb1" successfully wiped.

[[email protected] ~]# pvremove /dev/sdb2
  Labels on physical volume "/dev/sdb2" successfully wiped.

[[email protected] ~]# pvremove /dev/sdb3
  Labels on physical volume "/dev/sdb3" successfully wiped.

[[email protected] ~]# pvs
  PV         VG     Fmt  Attr PSize   PFree
  /dev/sda2  centos lvm2 a--  <19.00g    0

[[email protected] ~]# vgs
  VG     #PV #LV #SN Attr   VSize   VFree
  centos   1   2   0 wz--n- <19.00g    0

[[email protected] ~]# lvs
  LV   VG     Attr       LSize   Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  root centos -wi-ao---- <17.00g
  swap centos -wi-ao----   2.00g