第1章 磁碟知識體系結構
1.1 磁碟知識體系結構
1) 磁碟的外部結構和內部結構
2) 磁碟陣列 RAID LVM 邏輯卷管理
3) 磁碟分割槽 主分割槽 擴充套件分割槽 邏輯分割槽
fdisk
parted
4) 磁碟格式化
5) 磁碟的使用 掛載
1.1.1 磁碟結構
1.1.1.1 外部結構
機械磁碟
固態磁碟
1.1.1.2 內部結構
1.1.1.2.1 磁碟的主軸
1.1.1.2.2 磁碟的轉速
家用: 5.4K 7.2K
企業: 10K 15K
1.1.1.2.3 磁碟碟片
作用:儲存資料
磁頭:
作用:
a)讀寫資料
b)盤面的數量等於磁碟磁頭的數量
c)磁碟介面
連線主機板
介面型別
IDC 淘汰
SCSI 淘汰
SATA
SAS
SSD
PCI-E
1.1.1.2.4 磁碟(Disk)
1.1.1.2.5 磁頭(Head)
作用說明:用來寫入和讀取資料的
特點說明:盤面數量等於磁頭數量
工作原理:採用徑向運動讀寫資料
1.1.1.2.6 磁軌(Track)
作用說明:用來儲存使用者資料
特點說明:由多個同心圓組成
儲存計數:最外面同心圓為0磁軌
工作原理:磁碟預設按照磁軌尋找資料
重點原理:磁頭徑向運動為機械運動(尋道) 效能小於固態硬碟(晶片)
原理特點:磁頭機械運動較慢
1.1.1.2.7 扇區(Sector)
作用說明:用來儲存使用者資料
特點說明:磁碟儲存最小單位
儲存計數:預設磁碟扇區從1扇區開始,扇區大小為512位元組
系統儲存最小單位是block
1.1.1.2.8 柱面(Cylinder)
作用說明:用來儲存使用者資料
特點說明:不同盤面上相同的磁軌組成(圓柱體)
工作原理:磁碟預設按照柱面進行讀寫
重點原理:磁頭之間的切換為電子切換
原理特點:磁頭電子切換較快
1.1.1.2.9 單元塊(Units)
作用說明:用來儲存使用者資料
特點說明:表示單個柱面大小
1.2 磁碟陣列
磁碟陣列如何配置
配置LVM L 邏輯 v 卷組 M 管理 邏輯卷管理 --> 實現可以隨意調整磁碟分割槽大小
獲得更大的容量
獲得更高的效能
獲得更好的安全性
1.2.1 raid 0
具有最高的儲存效能(磁碟容量不浪費,讀寫很快),這些磁碟的總和
10*1TB raid 0
要製作RAID 0至少要1塊物理磁碟,不做raid不能安裝系統
安全:任何一塊硬碟損壞,所有的資料無法使用,安全性最低
可用容量:所有硬碟容量的和
效能:讀寫速度最快
使用場景:不要求安全,只要求速度
舉例:資料庫從庫/儲存從庫
1.2.2 raid 1
映象:損失50%的資料容量。例如2塊1T的盤,做完RAID 1後容量為1T
raid只能2塊硬碟
Mirror不能提高儲存效能。理論上寫效能和單盤相差不大
安全冗餘:100%
可用容量:一半(兩塊硬碟容量之和)
效能:寫入速度慢,讀取速度OK
使用場景:只追求安全性對於速度沒要求
舉例:系統盤,監控伺服器
1.2.3 raid 5
需要至少3塊,損失一塊硬碟
6*600G
安全:最多可以損壞一塊硬碟
可用容量:損失一塊盤的容量
效能:寫入速度不快,讀取Ok
使用場景:對於資料安全,對於速度要求不高
舉例:普遍資料庫 ,儲存訪問量不高
1.2.4 raid 10 成本最高
最少4塊硬碟,增加硬碟必須是2的倍數;所有硬碟容量的一半
安全:最多損壞一半硬碟
可用容量:損失所有硬碟一半的容量
效能:寫入和讀取 都很快
使用場景:對於安全和效能都要
舉例:高併發或高訪問量 資料庫主庫 儲存
1.3 磁碟分割槽
情況1:
MBR格式
4個主分割槽 sda1 sda2 sda3 sda4
情況2:
3個主分割槽 sda1 ada2 sda3 sda4(擴充套件分割槽) 無法直接使用 無法掛載
sda4(200G)
多個邏輯分割槽
sda5 100G 可以直接使用 可以掛載
sda6 100G 可以直接使用 可以掛載
第1塊sas硬碟的第一個主分割槽
/dev/sda1
第2塊sata硬碟的第2個主分割槽
/dev/sdb2
第3塊sata硬碟的第1個邏輯分割槽
/dev/sdc5
伺服器的第一塊磁碟使用 sda
第二快磁碟使用 sdb
第一塊磁碟的第一個主分割槽 sda1
第二個主分割槽 sda2
第一個邏輯分割槽 sda5
第二快磁碟的第一個主分割槽 sdb1
第二個主分割槽 sdb2
第一個邏輯分割槽 sdb5
1.4 磁碟格式化 fdisk
fdisk 小於2T的磁碟進行分割槽 MBR
1.4.1 MBR格式 4個主分割槽
Linux作業系統 RAID
300G 600G 900G
300*2快 RAID1 保護作業系統 600G--> MBR引導
1.4.2 parted 大於2T的磁碟進行分割槽 GPT
GPT格式 128個主分割槽
1.5 磁碟分割槽: fdisk
第一步: 準備一塊新的磁碟 100M
虛擬機器新增
工作: 物理機 購買新的磁碟
雲服務 購買雲端儲存
第二步: 檢視確認磁碟已在作業系統中顯示 fdisk
雲服務新的磁碟 需要重啟
物理機新的磁碟 支援熱插拔
虛擬機器vmware需要重啟
第三步: fdisk 分割槽
[root@oldboyedu-lnb ~]# fdisk /dev/sdb # 對第二快磁碟進行分割槽 Command (m for help): m # help 幫助 Command action d delete a partition # 刪除分割槽 g create a new empty GPT partition table # 建立GPT分割槽表 l list known partition types # 顯示分割槽表型別 m print this menu # 列印幫助選單 n add a new partition # 建立新的分割槽 p print the partition table # 顯示分割槽表 q quit without saving changes # 退出不儲存 t change a partition's system id # 改變分割槽型別 w write table to disk and exit # 儲存並退出 Command (m for help): n Partition type: # 分割槽類 p primary (0 primary, 0 extended, 4 free) #可用4個主分割槽 e extended # 擴充套件分割槽 Select (default p): # 選擇分割槽表型別 預設 p 主分割槽 Partition number (1-4, default 1): 選擇分割槽號碼預設1 First sector (2048-208895, default 2048): # 開始的扇區 預設 Using default value 2048 Last sector, +sectors or +size{K,M,G} (2048-208895, default 208895): +20M #結束的扇區 或者 K M G +20M 第一個分割槽為20M Partition 1 of type Linux and of size 20 MiB is set 檢視當前的分割槽 Command (m for help): p Disk /dev/sdb: 106 MB, 106954752 bytes, 208896 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: 0x5bcfea06 Device Boot Start End Blocks Id System /dev/sdb1 2048 43007 20480 83 Linux
第四步: 格式化
xfs cenetos7預設的分割槽表型別
[root@oldboyedu-lnb ~]# mkfs.xfs /dev/sdb1 meta-data=/dev/sdb1 isize=512 agcount=1, agsize=5120 blks = sectsz=512 attr=2, projid32bit=1 = crc=1 finobt=0, sparse=0 data = bsize=4096 blocks=5120, imaxpct=25 = sunit=0 swidth=0 blks naming =version 2 bsize=4096 ascii-ci=0 ftype=1 log =internal log bsize=4096 blocks=855, version=2 =sectsz=512 sunit=0 blks, lazy-count=1 realtime =none extsz=4096 blocks=0, rtextents=0
第五步: 掛載使用
[root@oldboyedu-lnb ~]# mount /dev/sdb1 /mnt [root@oldboyedu-lnb ~]# df -h tmpfs 98M 0 98M 0% /run/user/0 /dev/sdb1 17M 1.1M 16M 7% /mnt
第六步: 解除安裝磁碟
[root@oldboyedu-lnb ~]# umount /mnt
作業練習:
分割槽 3個主分割槽+1個擴充套件分割槽+2個邏輯分割槽
磁碟案例
注意:分割槽的時候,如果分三個主分割槽,把剩下的所有(預設)給第三個主分割槽,如果分三個主分割槽,1個擴充套件分割槽,把剩下的所有分給擴充套件分割槽. 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): First sector (2048-208895, default 2048): Using default value 2048 Last sector, +sectors or +size{K,M,G} (2048-208895, default 208895): +16M Partition 1 of type Linux and of size 16 MiB is set Command (m for help): n Partition type: p primary (1 primary, 0 extended, 3 free) e extended Select (default p): p Partition number (2-4, default 2): First sector (34816-208895, default 34816): Using default value 34816 Last sector, +sectors or +size{K,M,G} (34816-208895, default 208895): +16M Partition 2 of type Linux and of size 16 MiB is set Command (m for help): n Partition type: p primary (2 primary, 0 extended, 2 free) e extended Select (default p): p Partition number (3,4, default 3): 3 First sector (67584-208895, default 67584): Using default value 67584 Last sector, +sectors or +size{K,M,G} (67584-208895, default 208895): +16M Partition 3 of type Linux and of size 16 MiB is set Command (m for help): n Partition type: p primary (3 primary, 0 extended, 1 free) e extended Select (default e): e Selected partition 4 First sector (100352-208895, default 100352): Using default value 100352 Last sector, +sectors or +size{K,M,G} (100352-208895, default 208895): Using default value 208895 Partition 4 of type Extended and of size 53 MiB is set Command (m for help): n All primary partitions are in use Adding logical partition 5 First sector (102400-208895, default 102400): Using default value 102400 Last sector, +sectors or +size{K,M,G} (102400-208895, default 208895): +16M Partition 5 of type Linux and of size 16 MiB is set Command (m for help): n All primary partitions are in use Adding logical partition 6 First sector (137216-208895, default 137216): Using default value 137216 Last sector, +sectors or +size{K,M,G} (137216-208895, default 208895): +16M Partition 6 of type Linux and of size 16 MiB is set Command (m for help): w The partition table has been altered! Calling ioctl() to re-read partition table. Syncing disks. [root@oldboyedu-lnb~]# ll /dev/sdb sdb sdb1 sdb2 sdb3 sdb4 sdb5 sdb6
第2章 磁碟分割槽方式
2.1 開機自動載入方案
2.1.1 寫入rc.local
2.1.2 寫入/etc/fstab
UUID=d25e7543-..... / xfs defaults 1 1 UUID或者裝置名稱 掛載點 檔案系統 掛載引數 是否備份 開機磁碟檢查
2.1.3 檢視UUID
lsblk 檢視
[root@oldboyedu-lnb~]# lsblk -f
NAME FSTYPE LABEL UUID MOUNTPOINT sda ├─sda1 xfs 1af0c500-80df-4926-88aa-8e4419a636c9 /boot ├─sda2 swap 35a4f6da-d8f3-4449-83d2-bef70f83bda0 [SWAP] └─sda3 xfs 32c0b660-ac0a-4b5c-b1c9-4f5209eba66a / sdb sr0 iso9660 CentOS 7 x86_64 2018-11-25-23-54-16-00
blkid檢視
[root@oldboyedu-lnb~]# /dev/sda1: UUID="1af0c500-80df-4926-88aa-8e4419a636c9" TYPE="xfs" /dev/sda2: UUID="35a4f6da-d8f3-4449-83d2-bef70f83bda0" TYPE="swap" /dev/sda3: UUID="32c0b660-ac0a-4b5c-b1c9-4f5209eba66a" TYPE="xfs" /dev/sr0: UUID="2018-11-25-23-54-16-00" LABEL="CentOS 7 x86_64" TYPE="iso9660" PTTYPE="dos"
2.2 磁碟分割槽fdisk
fdisk適用於小於2TB磁碟 fdisk只支援mbr分割槽表
開機自動掛載 /etc/fstab 掛載裝置的配置檔案 /etc/rc.local
[root@oldboyedu-lnb ~]# tail -2 /etc/fstab /dev/sdb1 /mnt xfs defaults 0 0 UUID=fc550328-186c-408f-aa4f-daf78bf04281 /data xfs defaults 0 0
PS: 在使用df -h過程中發現無法正常顯示磁碟資訊
使用umount -f /data 強制解除安裝後正常使用
2.3 磁碟分割槽parted
parted一般用於大於2TB磁碟 gpt支援更大的硬碟且支援更多的分割槽 不寫入記憶體直接生效 常用引數 主分割槽可分128個 GPT 格式:parted 命令可以建立全域性惟一的識別符號分割槽表 GPT,而 fdisk 和 cfdisk 則僅限於 DOS 分割槽表。 mktable 建立磁碟分割槽表 mktable gpt 建立分割槽為GTP格式 設定分割槽表為GPT p print 顯示磁碟分割槽資訊 mkpart make partition 建立分割槽 rm 刪除分割槽 q quit 退出 建立分割槽並檢視分割槽p 提示沒有找到分割槽 說明還沒有進行分割槽 [root@oldboyedu-lnb ~]# parted -l # 檢視gpt格式分割槽資訊 [root@oldboyedu-lnb ~]# parted /dev/sdb (parted) mktable gpt (parted) p Model: VMware, VMware Virtual S (scsi) Disk /dev/sdb: 3221GB Sector size (logical/physical): 512B/512B Partition Table: gpt Disk Flags: Number Start End Size File system Name Flags (parted) mkpart primary File system type? [ext2]? xfs # 檔案系統 Start? 0 # 開始 End? 1000 # 結束 Warning: The resulting partition is not properly aligned for best performance. Ignore/Cancel? I [root@oldboyedu-lnb ~]# parted /dev/sdb GNU Parted 3.1 Using /dev/sdb Welcome to GNU Parted! Type 'help' to view a list of commands. (parted) mkpart primary 1000 1500 Warning: The resulting partition is not properly aligned for best performance. Ignore/Cancel? I (parted) print Model: VMware, VMware Virtual S (scsi) Disk /dev/sdb: 3221GB Sector size (logical/physical): 512B/512B Partition Table: gpt Disk Flags: Number Start End Size File system Name Flags 1 17.4kB 1000MB 1000MB primary 2 1000MB 1500MB 500MB primary
2.4 刪除主分割槽
Number Start End Size File system Name Flags 1 17.4kB 1000MB 1000MB primary 2 1000MB 1500MB 500MB primary (parted) rm 2
2.5 非互動式parted分割槽
[root@oldboyedu-lnb ~]# parted /dev/sdb mkpart primary 1000 2000 [root@oldboyedu-lnb ~]# parted /dev/sdb mkpart primary 2000 2500 Information: You may need to update /etc/fstab. [root@oldboyedu-lnb ~]# parted /dev/sdb print Model: VMware, VMware Virtual S (scsi) Disk /dev/sdb: 3221GB Sector size (logical/physical): 512B/512B Partition Table: gpt Disk Flags: Number Start End Size File system Name Flags 1 17.4kB 1000MB 1000MB primary 2 1000MB 2000MB 999MB primary 3 2000MB 2500MB 500MB primary
2.6 非互動式刪除
[root@oldboyedu-lnb ~]# parted /dev/sdb rm 2
格式化分割槽
[root@oldboyedu-lnb ~]# mkfs.xfs /dev/sdb1
下一步掛載使用
[root@oldboyedu-lnb ~]# mount /dev/sdb1 /mnt
2.7 企業場景
磁碟空間不夠用
雲主機 購買磁碟-->雲伺服器後臺掛載到對應的伺服器(在光碟機中放入映象檔案)
物理機 直接插新的磁碟 支援熱插拔
2.7.1 格式化磁碟
[root@oldboyedu-lnb ~]# mkfs.xfs -f /dev/sdb
2.7.2 掛載使用磁碟
[root@oldboyedu-lnb ~]# mount /dev/sdb /data
2.7.3 檢視磁碟掛載
[root@oldboyedu-lnb ~]# df -h /dev/sdb 3.0T 33M 3.0T 1% /data
2.7.4 開機自動掛載 /etc/fstab
/dev/sdb /data xfs defaults 0 0
2.8 磁碟案例
企業案例:java環境記憶體不夠用,佔用大量的swap分割槽
記憶體滿: 導致Linux系統的程式被殺 優先殺佔用記憶體最高的那個服務
兩種情況:
一種情況是流量達到了上線 記憶體8G 實際用到了7.xG 必須升級記憶體
第二種情況流量沒有達到上線 網路波動引起的 某個時間點達到8G左右
程式程式碼導致記憶體溢位(使用者量沒有達到8G值)
swap 磁碟的空間臨時充當記憶體使用 速度較慢
swap分割槽在安裝系統可以劃分
在進入作業系統後可以臨時擴充
2.9 擴充套件swap分割槽大小
/dev/zero 白洞 不斷輸出內容 /dev/null 黑洞 /dev/urandom 隨機字元
2.9.1 第一步: 生成一個200M的檔案
dd if=/dev/zero of=/tmp/200m bs=1M count=200 inputfile outfile block size 複製次數 資料來源 輸出檔案 每次複製多大
2.9.2 第二步: 格式化swap分割槽
[root@oldboyedu-lnb ~]# mkswap /tmp/200m Setting up swapspace version 1, size = 204796 KiB no label, UUID=6ecfd552-d6f1-4769-b57b-39bb1a33d87d
2.9.3 第三步: 啟用 掛載swap分割槽
[root@oldboyedu-lnb ~]# swapon /tmp/200m swapon: /tmp/200m: insecure permissions 0644, 0600 suggested. You have 5new mail in /var/spool/mail/root [root@oldboyedu-lnb ~]# free -h total used free shared buff/cache available Mem: 974M 97M 527M 13M 349M 698M Swap: 1.2G 0B 1.2G
2.9.4 第四步: 解除安裝swap分割槽
[root@oldboyedu-lnb ~]# swapoff /tmp/200m You have new mail in /var/spool/mail/root [root@oldboyedu-lnb ~]# free -h total used free shared buff/cache available Mem: 974M 97M 527M 13M 349M 698M Swap: 1.0G 0B 1.0G
2.9.5 第五步:檢視swap的組成
[root@oldboyedu-lnb ~]# swapon -s Filename Type Size Used Priority /dev/sda2 partition 1048572 0 -1 /tmp/200m file 204796 0 -2
2.9.6 第六步: 開機自動掛載
/tmp/200m swap swap defaults 0 0
2.10 磁碟案例2:
1. du –sh 檢視某個目錄佔用空間大小 確認後刪除 2. 通過磁碟掛載的方式解決磁碟不夠用的情況
2.10.1 第一步: 生成10G的檔案
dd if=/dev/zero of=/var/log/10g bs=1M count=10000
2.10.2 第二步: 使用du命令查詢該檔案
du -h /*|grep G du -h /var/log/*|grep G
2.10.3 使用find查詢大檔案
[root@oldboyedu-lnb ~]# find / -type f -size +1G /var/log/10g
2.11 通過磁碟掛載的方式解決磁碟不夠用的情況
查詢到的大檔案 有用 增加磁碟的方式解決 原始檔的路徑不能變
/var/log/10g 持續不斷的往檔案中輸出日誌
2.11.1 第一步: 增加一塊新的磁碟進行格式化掛載
mkfs.xfs /dev/sdb mount /dev/sdb /data
2.11.2 第二步: 把/var/log/10g 檔案移動到/data下 第二快磁碟
2.11.3 第三步: 軟連結
[root@oldboyedu-lnb ~]# ln -s /data/10g /var/log/10g
2.12 磁碟案例3: 如何查詢小檔案多的目錄
使用find命令查詢目錄的大小
2.13 磁碟案例4
檔案是否被真的刪除
顯示 no space left on device ,df –h檢視磁碟有剩餘
inode和block的數量同時為0 檔案沒有被程式呼叫 重啟服務生效
2.13.1 第一步: 模式檔案被命令佔用
2.13.2 第二步: 使用lsof檢視被程式呼叫的檔案
安裝lsof命令 yum -y install lsof
[root@oldboyedu-lnb ~]# lsof|grep 10g tail 2053 root 3r REG 8,16 10485760000 67 /data/10g
2.13.3 第三步: 在檔案被佔用的情況下刪除10g這個檔案
[root@oldboyedu-lnb ~]# rm -f /data/10g [root@oldboyedu-lnb ~]# ll /data/ total 0 [root@oldboyedu-lnb ~]# df -h /dev/sdb 3.0T 9.8G 3.0T 1% /data
2.13.4 第四步: 重啟服務生效
httpd 服務---> /var/log/httpd/access.log
刪除access.log檔案後重啟(檔案過大但是還是沒有解決問題)
systemctl reload|restart httpd 重啟生效
[root@oldboyedu-lnb ~]# lsof |grep 10g tail 2053 root 3r REG 8,16 10485760000 67 /data/10g (deleted) [root@oldboyedu-lnb ~]# kill -9 2053