1. 程式人生 > >耳朵(十):Linux——磁碟,raid、LVM

耳朵(十):Linux——磁碟,raid、LVM

Linux磁碟管理:Linux下一切皆檔案,而檔案則儲存在磁碟中。 Linux磁碟管理好壞直接關係到整個系統的效能問題。 Linux磁碟管理常用三個命令為df、du和fdisk。 df:列出檔案系統的整體磁碟使用量 du:檢查磁碟空間使用量 fdisk:用於磁碟分割槽

df命令引數功能:檢查檔案系統的磁碟空間佔用情況。可以利用該命令來獲取硬碟被佔用了多少空間,目前還剩下多少空間等資訊。 -a :列出所有的檔案系統,包括系統特有的 /proc 等檔案系統; -k :以 KBytes 的容量顯示各檔案系統; -m :以 MBytes 的容量顯示各檔案系統; -h :以人們較易閱讀的 GBytes, MBytes, KBytes 等格式自行顯示; -H :以 M=1000K 取代 M=1024K 的進位方式; -T :顯示檔案系統型別, 連同該 partition 的 filesystem 名稱 (例如 ext3) 也列出; -i :不用硬碟容量,而以 inode 的數量來顯示

[[email protected] /]# df #顯示系統內所有的檔案系統 Filesystem 1K-blocks Used Available Use% Mounted on /dev/sda3 18658304 1337100 17321204 8% / devtmpfs 490016 0 490016 0% /dev tmpfs 499848 6876 492972 2% /run tmpfs 499848 0 499848 0% /sys/fs/cgroup

[[email protected] /]# df -h #以比較易讀的方式展示 Filesystem Size Used Avail Use% Mounted on /dev/sda3 18G 1.3G 17G 8% / devtmpfs 479M 0 479M 0% /dev tmpfs 489M 6.8M 482M 2% /run tmpfs 489M 0 489M 0% /sys/fs/cgroup [[email protected] /]# df -Th #顯示檔案系統型別 Filesystem Type Size Used Avail Use% Mounted on /dev/sda3 xfs 18G 1.3G 17G 8% / devtmpfs devtmpfs 479M 0 479M 0% /dev tmpfs tmpfs 489M 6.8M 482M 2% /run tmpfs tmpfs 489M 0 489M 0% /sys/fs/cgroup

[[email protected] ~]# df -h /etc/ #將/etc所在的磁碟以G的方式表示出來 Filesystem Size Used Avail Use% Mounted on /dev/sda3 18G 1.3G 17G 8% /

du Linux du命令也是檢視使用空間的,但是與df命令不同的是du命令是對檔案和目錄磁碟使用的空間的檢視,還是和df命令有一些區別的,這裡介紹Linux du命令。

-a :列出所有的檔案與目錄容量,因為預設僅統計目錄底下的檔案量而已。 -h :以人們較易讀的容量格式 (G/M) 顯示; -s :列出總量而已,而不列出每個各別的目錄佔用容量; -S :不包括子目錄下的總計,與 -s 有點差別。 -k :以 KBytes 列出容量顯示; -m :以 MBytes 列出容量顯示;

[[email protected] ~]# du #不加任何引數,系統會預設輸出當前目錄下的檔案或目錄所佔空間。 0 ./findresults/bbb 12 ./findresults 0 ./mu 0 ./app/myquota 0 ./app 64 .

[[email protected] ~]# du -s #讀出當前目錄下的檔案或目錄所佔磁碟空間總數 64 . [[email protected] ~]# du -S #不包括子目錄下的總計 0 ./findresults/bbb 12 ./findresults 0 ./mu 0 ./app/myquota 0 ./app 52 .

fdisk fdisk 是 Linux 的磁碟分割槽表操作工具。

[[email protected] ~]# fdisk -l #列出系統磁碟分割槽資訊,比lsblk命令更加詳細,但沒有其直觀。

Disk /dev/sdb: 1073 MB, 1073741824 bytes, 2097152 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 /dev/sda: 21.5 GB, 21474836480 bytes, 41943040 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: 0x000de9a5

磁碟分割槽:[[email protected] ~]# lsblk #檢視系統磁碟分割槽資訊 NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 20G 0 disk ├─sda1 8:1 0 2G 0 part /boot ├─sda2 8:2 0 200M 0 part [SWAP] └─sda3 8:3 0 17.8G 0 part / sdb 8:16 0 1G 0 disk sdc 8:32 0 1G 0 disk └─storage-vo 253:0 0 152M 0 lvm /lvm sdd 8:48 0 1G 0 disk sde 8:64 0 1G 0 disk sr0 11:0 1 4.2G 0 rom

[[email protected] ~]# fdisk /dev/sdb #對/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 0xfe661663.

Command (m for help): m #m引數幫助檢視分割槽內的一些操作 Command action a toggle a bootable flag b edit bsd disklabel c toggle the dos compatibility flag d delete a partition g create a new empty GPT partition table G create an IRIX (SGI) partition table l list known partition types m print this menu n add a new partition #比如:加入一個新的分割槽 o create a new empty DOS partition table p print the partition table #比如:p輸出分割槽表 q quit without saving changes s create a new empty Sun disklabel t change a partition’s system id u change display/entry units v verify the partition table w write table to disk and exit x extra functionality (experts only)

Command (m for help): n Partition type: p primary (0 primary, 0 extended, 4 free) #主分割槽 e extended #擴充套件分割槽 Select (default p): Partition number (1-4, default 1): 1 #分割槽編號 First sector (2048-2097151, default 2048): Using default value 2048 Last sector, +sectors or +size{K,M,G} (2048-2097151, default 2097151): #分割槽大小 ,不可超過磁碟大小 Using default value 2097151 Partition 1 of type Extended and of size 1023 MiB is set Command (m for help): w #儲存退出 / 若按q引數,則是停止退出,則之前操作統一退出 The partition table has been altered! Calling ioctl() to re-read partition table.

[[email protected] ~]# lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 20G 0 disk ├─sda1 8:1 0 2G 0 part /boot ├─sda2 8:2 0 200M 0 part [SWAP] └─sda3 8:3 0 17.8G 0 part / sdb 8:16 0 1G 0 disk └─sdb1 8:17 0 1K 0 part #再次檢視建立了一個sdb2分割槽

格式化:磁碟建立好之後需要進行格式化統一格式。 mkf命令

[[email protected] ~]# mkfs[tab][tab] #系統所支援的所有檔案格式 mkfs mkfs.cramfs mkfs.ext3 mkfs.fat mkfs.msdos mkfs.xfs mkfs.btrfs mkfs.ext2 mkfs.ext4 mkfs.minix mkfs.vfat

[[email protected] ~]# mkfs.ext4 /dev/sdc #ext4格式進行格式化 mke2fs 1.42.9 (28-Dec-2013) /dev/sdc is entire device, not just one partition! Proceed anyway? (y,n) y Filesystem label= OS type: Linux Block size=4096 (log=2) Fragment size=4096 (log=2) Stride=0 blocks, Stripe width=0 blocks 327680 inodes, 1310720 blocks 65536 blocks (5.00%) reserved for the super user First data block=0 Maximum filesystem blocks=1342177280 40 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 Allocating group tables: done Writing inode tables: done Creating journal (32768 blocks): done Writing superblocks and filesystem accounting information: done

掛載mount 取消掛載umount -t:指定檔案系統型別 -a:掛載所有(/etc/fstab) -l:檢視所有掛載

[[email protected] ~]# mount /dev/sdc /dddir/ #將sdc掛載到/dddir目錄 [[email protected] ~]# df -h #檢視 Filesystem Size Used Avail Use% Mounted on /dev/sda3 18G 1.3G 17G 8% / devtmpfs 479M 0 479M 0% /dev tmpfs 489M 0 489M 0% /dev/shm tmpfs 489M 6.8M 482M 2% /run tmpfs 489M 0 489M 0% /sys/fs/cgroup /dev/sr0 4.3G 4.3G 0 100% /mnt /dev/sdb2 3.0G 34M 3.0G 2% /app /dev/sda1 2.0G 119M 1.9G 6% /boot tmpfs 98M 0 98M 0% /run/user/0 /dev/sdc 4.8G 20M 4.6G 1% /dddir #掛載成功 [[email protected] ~]# umount /dddir/ #取消掛載 [[email protected] ~]# df -h Filesystem Size Used Avail Use% Mounted on /dev/sda3 18G 1.3G 17G 8% / devtmpfs 479M 0 479M 0% /dev tmpfs 489M 0 489M 0% /dev/shm tmpfs 489M 6.8M 482M 2% /run tmpfs 489M 0 489M 0% /sys/fs/cgroup /dev/sr0 4.3G 4.3G 0 100% /mnt /dev/sdb2 3.0G 34M 3.0G 2% /app /dev/sda1 2.0G 119M 1.9G 6% /boot tmpfs 98M 0 98M 0% /run/user/0 #/dddir掛載點以取消

raid 系統進行互動時會產生大量的io操作,不免會損壞系統所以基於此產生了raid管理

raid:即廉價冗餘磁碟陣列( Redundant Array of Inexpensive Disks )。由於當時大容量磁碟比較昂貴, RAID 的基本思想是將多個容量較小、相對廉價的磁碟進行有機組合,從而以較低的成本獲得與昂貴大容量磁碟相當的容量、效能、可靠性。隨著磁碟成本和價格的不斷降低, RAID 可以使用大部分的磁碟, “廉價” 已經毫無意義。因此, RAID 諮詢委員會( RAID Advisory Board, RAB )決定用 “ 獨立 ” 替代 “ 廉價 ” ,於時 RAID 變成了獨立磁碟冗餘陣列( Redundant Array of Independent Disks )。但這僅僅是名稱的變化,實質內容沒有改變。

RAID分類:硬RAID,效能較高。他們採用 PCI Express 卡物理地提供有專用的 RAID 控制器。它不會使用主 機資源。他們有 NVRAM 用於快取的讀取和寫入。快取用於 RAID 重建時,即使出現電源故障,它會使用後備 的電池電源保持快取 軟RAID:效能較低,因為其使用主機的資源。 需要載入 RAID 軟體以從軟體 RAID 卷中讀取資料。在載入 RAID 軟體前,作業系統需要引導起來才能載入 RAID 軟體。在軟體 RAID 中無需物理硬體。零成本投資 RAID等級: 1.RAID0 不含校驗與冗餘的條帶儲存,無備份 讀寫效能有提升,冗餘能力無,空間利用率100%,至少需要2塊磁碟 2.RAID1 不含校驗的映象儲存 ,完整備份 讀效能有提升,寫效能下降,冗餘能力有,空間利用率50%,至少需要2塊磁碟 3、RAID5 資料塊級別的分散式校驗條帶儲存 ,效能與資料備份的均衡考慮 讀寫效能有提升,冗餘能力有,空間利用率(n-1)/n,至少需要3塊磁碟 4、RAID10 條帶加映象儲存 讀寫效能提升冗餘能力有,空間利用率50%,至少需要4塊盤 5、RAID01 映象加條帶儲存 命令引數:mdadm -a 檢測裝置名稱 -n 指定裝置數量 -l 指定RAID級別 -C 建立 -v 顯示過程 -f 模擬裝置損壞(標記) -r 移除裝置 -Q 檢視摘要資訊 -D 檢視詳細資訊 -S 停止RAID磁碟陣列 現在以筆者的系統進行建立raid0

[[email protected] ~]# mdadm -Cv /dev/md0 -a yes -n 2 -l 0 /dev/sdc /dev/sdd mdadm: chunk size defaults to 512K mdadm: /dev/sdc appears to contain an ext2fs file system size=5242880K mtime=Thu Oct 25 08:29:19 2018 mdadm: /dev/sdd appears to contain an ext2fs file system size=5242880K mtime=Wed Dec 31 19:00:00 1969 Continue creating array? y mdadm: Defaulting to version 1.2 metadata mdadm: array /dev/md0 started.

[[email protected] ~]# mkfs.ext4 /dev/md0 #然後對md0進行ex4格式化 mke2fs 1.42.9 (28-Dec-2013) Filesystem label= OS type: Linux Block size=4096 (log=2) Fragment size=4096 (log=2) Stride=128 blocks, Stripe width=256 blocks 655360 inodes, 2618880 blocks 130944 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

[[email protected] ~]# mdadm -D /dev/md0 #檢視raid /dev/md0: Version : 1.2 Creation Time : Thu Oct 25 08:48:36 2018 Raid Level : raid0 Array Size : 10475520 (9.99 GiB 10.73 GB) Raid Devices : 2 Total Devices : 2 Persistence : Superblock is persistent

   Update Time : Thu Oct 25 08:48:36 2018
         State : clean 
Active Devices : 2

Working Devices : 2 Failed Devices : 0 Spare Devices : 0

    Chunk Size : 512K

Consistency Policy : none

          Name : localhost.localdomain:0  (local to host localhost.localdomain)
          UUID : 61f32279:a678d4f1:d4a1eb74:dc1b65bd
        Events : 0

Number   Major   Minor   RaidDevice State
   0       8       32        0      active sync   /dev/sdc              
   1       8       48        1      active sync   /dev/sdd                  #raid0裡有sdc和sdd兩個檔案系統

[[email protected] ~]# mount /dev/md0 /dddir/ #掛載 [[email protected] ~]# df -h #檢視掛載 Filesystem Size Used Avail Use% Mounted on /dev/sda3 18G 1.3G 17G 8% / devtmpfs 479M 0 479M 0% /dev tmpfs 489M 0 489M 0% /dev/shm tmpfs 489M 6.8M 482M 2% /run tmpfs 489M 0 489M 0% /sys/fs/cgroup /dev/sr0 4.3G 4.3G 0 100% /mnt /dev/sdb2 3.0G 34M 3.0G 2% /app /dev/sda1 2.0G 119M 1.9G 6% /boot tmpfs 98M 0 98M 0% /run/user/0 /dev/md0 9.8G 37M 9.2G 1% /dddir #掛載成功

[[email protected] ~]# umount /dddir/ #取消掛載 [[email protected] ~]# mdadm -S /dev/md0 #停止raid陣列 mdadm: stopped /dev/md0 [[email protected] ~]# mdadm -D /dev/md0 #檢視顯示報錯,證明陣列以停止 mdadm: cannot open /dev/md0: No such file or directory

LVM的管理與使用

硬碟裝置管理技術雖然能夠有效地提高硬碟裝置的讀寫速度以及資料的安全性,但是在硬碟分好區或者部署 為RAID磁碟陣列之後,再想修改硬碟分割槽大小就不容易了,此時需要使用LVM LVM(Logical volume Manager)邏輯卷管理通過將底層物理硬碟抽象封裝起來,以邏輯卷的形式表現給上 層系統,邏輯卷的大小可以動態調整,而且不會丟失現有資料。新加入的硬碟也不會改變現有上層的邏輯 卷。作為一種動態磁碟管理機制,邏輯卷技術大大提高了磁碟管理的靈活性

   PV(Physical Volume)- 物理卷,物理卷在邏輯卷管理中處於底層,它可以是實際物理硬碟上的分割槽,也 可以是整個物理硬碟,也可以是raid裝置 
   VG(Volumne Group)- 卷組,卷組建立在物理卷之上,一個卷組中至少要包括一個物理卷,在卷組建立之 後可動態新增物理捲到卷組中。一個邏輯卷管理系統工程中可以只有一個卷組,也可以擁有多個卷組
   LV(Logical Volume)- 邏輯卷 ,邏輯卷建立在卷組之上,卷組中的未分配空間可以用於建立新的邏輯卷,邏 輯卷建立後可以動態地擴充套件和縮小空間。系統中的多個邏輯卷可以屬於同一個卷組,也可以屬於不同的多個 卷組 
   PE(physical extent),每一個物理卷被劃分為稱為PE(Physical Extents)的基本單元,具有唯一編號的PE是 可以被LVM定址的小單元。PE的大小是可配置的,預設為4MB

功能/命令 物理卷管理 卷組管理 邏輯卷管理 掃描 pvscan vgscan lvscan 建立 pvcreate vgcreate lvcreate 顯示 pvdisplay vgdisplay lvdisplay 刪除 pvremove vgremove lvremove 擴充套件 vgextend lvextend 縮小 vgreduce lvreduce

[[email protected] ~]# pvcreate /dev/sdc /dev/sdd #建立物理卷 WARNING: ext4 signature detected on /dev/sdc at offset 1080. Wipe it? [y/n]: y Wiping ext4 signature on /dev/sdc. WARNING: ext4 signature detected on /dev/sdd at offset 1080. Wipe it? [y/n]: y Wiping ext4 signature on /dev/sdd. Physical volume “/dev/sdc” successfully created. Physical volume “/dev/sdd” successfully created.

[[email protected] ~]# vgcreate storagr /dev/sdc /dev/sdd #建立卷組把物理卷加入卷組 Volume group “storagr” successfully created

[[email protected] ~]# lvcreate -n vo -L 150m storagr #建立邏輯卷 Rounding up size to full physical extent 152.00 MiB Logical volume “vo” created.

[[email protected] /]# mkfs.ext4 /dev/storagr/vo #格式化 mke2fs 1.42.9 (28-Dec-2013) Filesystem label= OS type: Linux Block size=1024 (log=0) Fragment size=1024 (log=0) Stride=0 blocks, Stripe width=0 blocks 38912 inodes, 155648 blocks 7782 blocks (5.00%) reserved for the super user First data block=1 Maximum filesystem blocks=33816576 19 block groups 8192 blocks per group, 8192 fragments per group 2048 inodes per group Superblock backups stored on blocks: 8193, 24577, 40961, 57345, 73729

Allocating group tables: done Writing inode tables: done Creating journal (4096 blocks): done Writing superblocks and filesystem accounting information: done [[email protected] /]# mount /dev/storagr/vo /lvm/ #掛載

[[email protected] /]# df -h #檢視掛載 Filesystem Size Used Avail Use% Mounted on /dev/sda3 18G 1.3G 17G 8% / devtmpfs 479M 0 479M 0% /dev tmpfs 489M 0 489M 0% /dev/shm tmpfs 489M 6.8M 482M 2% /run tmpfs 489M 0 489M 0% /sys/fs/cgroup /dev/sr0 4.3G 4.3G 0 100% /mnt /dev/sdb2 3.0G 34M 3.0G 2% /app /dev/sda1 2.0G 119M 1.9G 6% /boot tmpfs 98M 0 98M 0% /run/user/0 /dev/mapper/storagr-vo 144M 1.6M 132M 2% /lvm #掛載成功 [[email protected] /]# lvdisplay #檢視邏輯卷 — Logical volume — LV Path /dev/storagr/vo LV Name vo VG Name storagr LV UUID yO9q3e-hbzd-RAII-WpCr-o5PU-lJp2-FWMTv6 LV Write Access read/write LV Creation host, time localhost.localdomain, 2018-10-25 09:14:10 -0400 LV Status available

open 1

LV Size 152.00 MiB Current LE 38 Segments 1 Allocation inherit Read ahead sectors auto

  • currently set to 8192 Block device 253:0

[[email protected] /]# umount /lvm/ #取消掛載 [[email protected] /]# lvremove /dev/storagr/vo #刪除邏輯卷組 Do you really want to remove active logical volume storagr/vo? [y/n]: y Logical volume “vo” successfully removed [[email protected] /]# vgremove /dev/storagr #刪除卷組 Volume group “storagr” successfully removed [[email protected] /]# pvremove /dev/sdc /dev/sdd #刪除物理卷 Labels on physical volume “/dev/sdc” successfully wiped. Labels on physical volume “/dev/sdd” successfully wiped. [[email protected] /]#