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號之和。

[root@localhost ~]# 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號是偶數還是奇數。

[root@localhost 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創建:

// 磁盤分區,模擬創建物理磁盤過程
[root@cdcjtx-centos-001 ~]# 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.
正在同步磁盤。
[root@cdcjtx-centos-001 ~]# 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
[root@cdcjtx-centos-001 ~]# pvcreate /dev/sdb1
  Physical volume "/dev/sdb1" successfully created.
[root@cdcjtx-centos-001 ~]# pvcreate /dev/sdb2
  Physical volume "/dev/sdb2" successfully created.
[root@cdcjtx-centos-001 ~]# pvcreate /dev/sdb3
  Physical volume "/dev/sdb3" successfully created.
[root@cdcjtx-centos-001 ~]# 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的邏輯卷組
[root@cdcjtx-centos-001 ~]# vgcreate -s 12M TESTvg /dev/sdb1 /dev/sdb2 /dev/sdb3
  Volume group "TESTvg" successfully created
[root@cdcjtx-centos-001 ~]# 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的邏輯分區
[root@cdcjtx-centos-001 ~]# lvcreate -L 4G -n TESTlv TESTvg
  Rounding up size to full physical extent <4.01 GiB
  Logical volume "TESTlv" created.
[root@cdcjtx-centos-001 ~]# 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目錄下
[root@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: 完成

[root@cdcjtx-centos-001 ~]# partprobe // 在不重新啓動機器的情況下系統能夠識別這些分區
[root@cdcjtx-centos-001 ~]# mount /dev/TESTvg/TESTlv /users/
[root@cdcjtx-centos-001 ~]# cp -R /etc/pam.d/ /users/
[root@cdcjtx-centos-001 ~]# 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容量,並驗證數據完整度

[root@cdcjtx-centos-001 ~]# 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.

[root@cdcjtx-centos-001 ~]# 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.

[root@cdcjtx-centos-001 ~]# 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作爲文件系統類型
// 先卸載物理文件系統->文件系統的強制檢測和修復->縮減邏輯邊界->縮減物理邊界->重新掛載

[root@cdcjtx-centos-001 ~]# umount /dev/TESTvg/TESTlv // 卸載物理文件系統

[root@cdcjtx-centos-001 ~]# 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

[root@cdcjtx-centos-001 ~]# 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.

[root@cdcjtx-centos-001 ~]# 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.

[root@cdcjtx-centos-001 ~]# mount /dev/TESTvg/TESTlv /users/ //重新掛載

[root@cdcjtx-centos-001 ~]# 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:

[root@cdcjtx-centos-001 ~]# umount /users/

[root@cdcjtx-centos-001 ~]# lvremove /dev/TESTvg/TESTlv
Do you really want to remove active logical volume TESTvg/TESTlv? [y/n]: y
  Logical volume "TESTlv" successfully removed

[root@cdcjtx-centos-001 ~]# vgremove TESTvg
  Volume group "TESTvg" successfully removed

[root@cdcjtx-centos-001 ~]# pvremove /dev/sdb1
  Labels on physical volume "/dev/sdb1" successfully wiped.

[root@cdcjtx-centos-001 ~]# pvremove /dev/sdb2
  Labels on physical volume "/dev/sdb2" successfully wiped.

[root@cdcjtx-centos-001 ~]# pvremove /dev/sdb3
  Labels on physical volume "/dev/sdb3" successfully wiped.

[root@cdcjtx-centos-001 ~]# pvs
  PV         VG     Fmt  Attr PSize   PFree
  /dev/sda2  centos lvm2 a--  <19.00g    0

[root@cdcjtx-centos-001 ~]# vgs
  VG     #PV #LV #SN Attr   VSize   VFree
  centos   1   2   0 wz--n- <19.00g    0

[root@cdcjtx-centos-001 ~]# 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















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