磁盤管理

計(jì)算機(jī)硬盤

  • 硬盤是計(jì)算機(jī)主要媒介之一,由一個(gè)或多個(gè)鋁制或者玻璃制的碟片組成,碟片外覆蓋有鐵磁性材料,硬盤內(nèi)部由磁道、柱面、扇區(qū)、磁頭等部件組成


    image.png
image.png
  • Linux系統(tǒng)中硬件設(shè)備相關(guān)配置文件存放在/dev下,常見(jiàn)硬盤命名為/dev/hda、/dev/sda、/dev/sdb、/dev/sdc、/dev/vda.不同硬盤接口,在系統(tǒng)中識(shí)別的設(shè)備名稱不一樣
  • IDE硬盤接口在Linux中設(shè)備名為/dev/hda,SAS、SCSI、SATA硬盤接口在Liunx設(shè)備名為sda,高效云盤硬盤接口會(huì)識(shí)別為/dev/vda等
  • 硬盤的最小存儲(chǔ)單位叫作sector(扇區(qū)),每個(gè)sector存儲(chǔ)512字節(jié),操作系統(tǒng)在讀取硬盤的時(shí)候,不會(huì)逐個(gè)sector地去讀取,這樣效率非常低,為了提升效率,操作系統(tǒng)會(huì)一次性連續(xù)讀取多個(gè)sector,即一次性讀取多個(gè)sector稱為block(塊)
  • 由多個(gè)sector組成的block是文件存取的最小單位.block的大小常見(jiàn)的有1KB、2KB、4KB,在Linux中常設(shè)置為4KB,即連續(xù)8個(gè)sector組成一個(gè)block
  • /boot分區(qū)的block一般為1KB,而/data分區(qū)或者/分區(qū)的block為4KB
# 查看block和inode大小
[root@ali ~]# dumpe2fs /dev/vda1|grep "Block size"
dumpe2fs 1.42.9 (28-Dec-2013)
Block size:               4096
[root@ali ~]# tune2fs -l /dev/vda1|grep "Block size"
Block size:               4096
[root@ali ~]# tune2fs -l /dev/vda1|grep "Inode size"
Inode size:           256
[root@lianxi ~]# stat /boot/|grep "IO Block"
Size: 4096      Blocks: 8          IO Block: 4096   directory
  • 創(chuàng)建一個(gè)普通10B大小的文件,系統(tǒng)默認(rèn)設(shè)置block為4KB,如果有一萬(wàn)個(gè)小文件,由于每個(gè)block只能存放一個(gè)文件,如果文件的大小比block大,會(huì)申請(qǐng)更多的block.相反如果文件的大小比默認(rèn)block小,仍會(huì)占用一個(gè)block,這樣剩余的空間會(huì)被浪費(fèi)掉

硬盤block及inode

  • 操作系統(tǒng)對(duì)于文件數(shù)據(jù)的存放包括兩個(gè)部分:一是文件內(nèi)容;二是權(quán)限及文件屬性.操作系統(tǒng)文件存放是基于文件系統(tǒng),文件系統(tǒng)會(huì)將文件的實(shí)際內(nèi)容存儲(chǔ)到block中,而將權(quán)限與屬性等信息存放至inode中
  • 在硬盤分區(qū)中,還有一個(gè)超級(jí)區(qū)塊(superblock),superblock會(huì)記錄整個(gè)文件系統(tǒng)的整體信息,包括inode、block的總量、使用大小、剩余大小等信息.每個(gè)inode與block都有編號(hào)對(duì)應(yīng),方便Linux系統(tǒng)快速定位查找文件
    • superblock:記錄文件系統(tǒng)的整體信息,包括inode與block的總量、使用大小、剩余大小以及文件系統(tǒng)的格式與相關(guān)信息
    • block:存儲(chǔ)文件的內(nèi)容,如果文件超過(guò)默認(rèn)block大小,會(huì)自動(dòng)占用多個(gè)block
    • inode:記錄文件的屬性、權(quán)限,同時(shí)會(huì)記錄該文件的數(shù)據(jù)所在的block編號(hào)
  • 每個(gè)inode與block都有編號(hào),而每個(gè)文件都會(huì)占用一個(gè)inode,inode內(nèi)則有文件數(shù)據(jù)放置的block號(hào)碼.如果能夠找到文件的inode,就可以找到該文件所放置數(shù)據(jù)的block號(hào)碼,從而讀取該文件內(nèi)容
  • 操作系統(tǒng)進(jìn)行格式化分區(qū)時(shí),操作系統(tǒng)自動(dòng)將硬盤分成兩個(gè)區(qū)域.一個(gè)是數(shù)據(jù)區(qū),用于存放文件數(shù)據(jù),另一個(gè)是inode table區(qū),用于存放inode包含的元信息
  • inode默認(rèn)為128KB或256KB,/boot分區(qū)inode默認(rèn)為128KB,其他分區(qū)默認(rèn)為256KB
# 查看Linux系統(tǒng)inode方法
dumpe2fs /dev/vda1|grep "Inode size"
tune2fs -l /dev/vda1|grep "Inode size"
stat /boot/|grep "Inode"
#格式化磁盤時(shí),可以指定inode個(gè)block的大小;-b指定默認(rèn)block,-I指定默認(rèn)inode值
mkfs.ext4 -b 4096 -I 256 /dev/sdb

硬鏈接

  • 一般情況下,文件名和inode編號(hào)是一一對(duì)應(yīng)的關(guān)系,每個(gè)inode號(hào)碼對(duì)應(yīng)一個(gè)文件名,但UNIX/Linux系統(tǒng)多個(gè)文件名也可以指向同一個(gè)inode號(hào)碼.這意味著可以用不同的文件名訪問(wèn)通用的內(nèi)容,對(duì)文件內(nèi)容進(jìn)行修改,會(huì)影響到所有文件名.但刪除一個(gè)文件名,不影響另一個(gè)文件名的訪問(wèn).這種情況稱為硬鏈接(hard link)
# 創(chuàng)建硬鏈接
ln test1.txt test2.txt
# test1.txt為源文件 test2.txt為目標(biāo)文件
[root@lianxi tmp]# ll -i
total 0
67193826 -rw-r--r--. 1 root root 0 May 23  2020 music.txt.bak
68075908 -rw-r--r--. 2 root root 0 Feb  8 16:17 test1.txt
68075908 -rw-r--r--. 2 root root 0 Feb  8 16:17 test2.txt
  • 實(shí)用技巧:硬鏈接不能跨分區(qū)鏈接,硬鏈接只能對(duì)文件生效,對(duì)目錄無(wú)效,也即是目錄不能創(chuàng)建硬鏈接.硬鏈接源文件與目標(biāo)文件公用一個(gè)inode值,從某種意義上來(lái)說(shuō),節(jié)省inode空間.不管是單獨(dú)刪除源文件還是刪除目標(biāo)文件,文件內(nèi)容始終存在.鏈接后的文件不占用系統(tǒng)多余的空間

軟鏈接

  • 文件1和文件3的inode雖然不同,但是文件3的內(nèi)容是文件1的路徑.讀取文件3時(shí),系統(tǒng)會(huì)自動(dòng)將訪問(wèn)者導(dǎo)向文件1.
  • 無(wú)論打開(kāi)哪一個(gè)文件,最終讀取的文件都是文件1.這時(shí),文件3就稱為文件1的軟鏈接(soft link)或者符號(hào)鏈接(symbolic link)
[root@lianxi tmp]# ln -s test1.txt test3.txt
[root@lianxi tmp]# ll -i
total 0
67193826 -rw-r--r--. 1 root root 0 May 23  2020 music.txt.bak
68075908 -rw-r--r--. 2 root root 0 Feb  8 16:17 test1.txt
68075908 -rw-r--r--. 2 root root 0 Feb  8 16:17 test2.txt
67193825 lrwxrwxrwx. 1 root root 9 Feb  8 16:25 test3.txt -> test1.txt
  • 實(shí)用技巧:軟鏈接可以跨分區(qū)鏈接,軟鏈接支持目錄同時(shí)也支持文件的鏈接.軟鏈接文件與目標(biāo)文件inode不同,從某種意義上說(shuō),會(huì)消耗更多的inode空間.不管是刪除源文件還是重啟系統(tǒng),該軟鏈接還存在,但是文件內(nèi)容會(huì)丟失,一旦新建源同名文件,軟鏈接文件恢復(fù)正常

Linux下磁盤實(shí)戰(zhàn)操作

  • 由于磁盤空間不足,需添加新硬盤,新添加的硬盤需要經(jīng)過(guò)格式化、分區(qū)才能被Linux系統(tǒng)所使用.操作流程如下:

    • 1.檢測(cè)Linux系統(tǒng)識(shí)別的硬盤設(shè)備,新添加硬盤會(huì)被識(shí)別為/dev/sdb,如果有多塊硬盤會(huì)被識(shí)別為/dev/sdc、/dev/sdd等設(shè)備名稱
image.png
  • 2.基于新硬盤/dev/sdb設(shè)備,創(chuàng)建磁盤分區(qū)/dev/sdb1
image.png
  • 3.fdisk分區(qū)命令參數(shù)如下,常見(jiàn)參數(shù)包括m、n、p、d、w
    • b:編輯bsd disklabel(磁盤標(biāo)簽)
    • c:切換dos兼容性標(biāo)志
    • d:刪除一個(gè)分區(qū)
    • g:創(chuàng)建一個(gè)新的空GPT分區(qū)表
    • G:創(chuàng)建一個(gè)IRIX(SGI)分區(qū)表
    • l:列出已知的分區(qū)類型
    • m:打印幫助菜單
    • n:添加一個(gè)新分區(qū)
    • o:創(chuàng)建一個(gè)新的空DOS分區(qū)表
    • p:打印分區(qū)表信息
    • q:退出不保存
    • s:創(chuàng)建一個(gè)新的空sun磁盤標(biāo)簽
    • t:更改分區(qū)的系統(tǒng)ID
    • u:更改顯示/輸入單元
    • v:驗(yàn)證分區(qū)表
    • w:將分區(qū)表寫入磁盤并退出
    • x:額外功能
  • 4.創(chuàng)建/dev/sdb1分區(qū)方法,執(zhí)行fdisk /dev/sdb,然后按屏幕提示一次輸入n、p、1,按Enter鍵,再輸入+10G,按Enter鍵,輸入w,最后執(zhí)行fdisk -l查找磁盤信息
image.png
image.png
  • 5.mkfs.ext4 /dev/sdb1 格式化磁盤分區(qū)
image.png
  • 6./dev/sdb1 分區(qū)格式化,使用mount命令掛載到/data目錄,命令詳解為
    • mkdir -p /data:創(chuàng)建/data數(shù)據(jù)目錄
    • mount /dev/sdb1 /data:掛載/dev/sdb1分區(qū)至/data目錄
    • df -h:查看磁盤分區(qū)詳情
    • echo "mount /dev/sdb1 /data" >> /etc/rc.local:將掛載分區(qū)命令加入/etc/rc.local開(kāi)機(jī)啟動(dòng)
image.png
  • 7.自動(dòng)掛載分區(qū)除了可以加到/etc/rc.local開(kāi)機(jī)啟動(dòng)之外,還可以加到/etc/fstab文件中
image.png
mount -o rw,remount /
# 表示重新掛載/系統(tǒng),檢測(cè)/etc/fstab是否有誤

基于GPT格式磁盤分區(qū)

  • MBR分區(qū)標(biāo)準(zhǔn)決定了MBR只支持在2TB以下的硬盤分區(qū),為了能支持使用大于2TB硬盤空間,需使用GPT格式進(jìn)行分區(qū).創(chuàng)建大于2TB的分區(qū),需使用parted工具
  • 基于GPT格式對(duì)10TB硬盤進(jìn)行分區(qū),操作如下:
    1. parted -s /dev/sdc mklabel gpt:設(shè)置分區(qū)類型為gpt格式
    2. mkfs.ext3 /dev/sdc:基于ext3文件系統(tǒng)類型格式化
    3. mount /dec/sdc /data:掛載/dev/sdc設(shè)備至/data
  • 假設(shè)/dev/sdc為10TB硬盤,使用GPT格式來(lái)格式化磁盤
image.png
  • 執(zhí)行命令parted -s /dev/sdc mklabel gpt
image.png
image.png
  • 基于mkfs.ext3 /dev/sdc格式化磁盤,parted命令行也可以進(jìn)行分區(qū),依次輸入如下命令:
    • parted→select /dev/sdc→mklabel gpt→mkpart primary 0 -1→print
    • mkfs.ext3 /dev/sdc
    • mount /dev/sdc1 /data
image.png
image.png
image.png
image.png
image.png

mount命令

  • mount命令工具主要用于將設(shè)備或者分區(qū)掛載至Linux系統(tǒng)目錄下,Linux系統(tǒng)在分區(qū)時(shí),基于mount機(jī)制將/dev/sda分區(qū)掛載至系統(tǒng)目錄,將設(shè)備與目錄掛載之后,Linux系統(tǒng)方可進(jìn)行文件的讀取和存儲(chǔ)
參數(shù)選項(xiàng) 解釋說(shuō)明
-V 顯示mount工具版本號(hào)
-l 顯示已加載的文件系統(tǒng)列表
-h 顯示幫助信息并退出
-v 輸出指令執(zhí)行的詳細(xì)信息
-n 加載沒(méi)有寫入文件/etc/mtab中的文件系統(tǒng)
-r 將文件系統(tǒng)加載為只讀模式
-a 加載文件/etc/fstab中配置的所有文件系統(tǒng)
-o 指定mount掛載擴(kuò)展參數(shù),常見(jiàn)擴(kuò)展指令rw、remount、loop等
-o atime 系統(tǒng)在每次讀取文檔時(shí)更新文檔時(shí)間
-o noatime 系統(tǒng)在每次讀取文檔時(shí)不更新文檔時(shí)間
-o defaults 使用預(yù)設(shè)的選項(xiàng)rw,suid,dev,exec,auto,nouser等
-o exec 運(yùn)行執(zhí)行檔被執(zhí)行
-o user、-o nouser 使用者可以執(zhí)行mount/umount的動(dòng)作
-o remount 將已掛載的系統(tǒng)分區(qū)重新以其他模式再次掛載
-o ro 只讀模式掛載
-o rw 可讀可寫模式掛載
-o loop 使用loop模式,把文件當(dāng)成設(shè)備掛載至系統(tǒng)目錄
-t 指定mount掛載設(shè)備類型,常見(jiàn)類型有nfs、ntfs-3g、vfat、iso9660等,如下面:
iso9660 光盤或光盤鏡像
msods Fat16文件系統(tǒng)
vfat Fat32文件系統(tǒng)
ntfs ntfs文件系統(tǒng)
ntfs-3g 識(shí)別移動(dòng)硬盤格式
smbfs 掛載Windows文件網(wǎng)絡(luò)共享
nfs UNIX/Linux文件網(wǎng)絡(luò)共享
mount /dev/sdb1 /data  # 掛載/dev/sdb1分區(qū)至/data目錄

mount /dev/cdrom /mnt  # 掛載/dev/cdrom分區(qū)至/mnt目錄

mount -t ntfs-3g /dev/sdc /data1  # 掛載/dev/sdc移動(dòng)硬盤至/data1目錄

mount -p remount,rw /  # 重新以讀寫模式掛載/系統(tǒng)

mount -t iso9660 -o loop centos7.iso /mnt  # 將Centos7.iso鏡像文件掛載至/mnt目錄

mount -t fat32 /dev/sdd1 /mnt  # 將U盤/dev/sdd1掛載至/mnt目錄

mount -t nfs 192.168.1.11:/data /mnt  # 將遠(yuǎn)程192.168.1.11:/data目錄掛載至本地mnt目錄

Linux硬盤故障修復(fù)

  • 操作系統(tǒng)的分區(qū)變成只讀文件系統(tǒng),錯(cuò)誤提示為Read-only file system.出現(xiàn)只讀文件系統(tǒng)會(huì)導(dǎo)致只能讀取而無(wú)法寫入新文件、新數(shù)據(jù)等操作

  • 造成該問(wèn)題的原因包括:磁盤老舊長(zhǎng)期大量的讀寫、文件系統(tǒng)文件被破壞、磁盤碎片文件、異常斷電、讀寫終端等

  • 修復(fù)步驟:

    1. 遠(yuǎn)程備份本地其他重要數(shù)據(jù),出現(xiàn)只讀文件系統(tǒng),需先備份其他重要數(shù)據(jù),基于rsync|scp遠(yuǎn)程備份,其中/data為源目錄,/data/backup/2020為目標(biāo)備份目錄
    rsync -av /data root@192.168.1.11:/data/backup/2020
    
    1. 可以重新掛載/系統(tǒng),掛載命令如下,測(cè)試文件系統(tǒng)是否可以讀寫
    mount -o remount,rw /
    
    1. 如果重新掛載/系統(tǒng)無(wú)法解決問(wèn)題,則重啟CD/DVD光盤引導(dǎo)進(jìn)入Linux Rescue修復(fù)模式.光標(biāo)選擇Troubleshooting,按Enter鍵,然后選擇Rescue a CentOS system,按Enter鍵
    2. 選擇1)"continue"繼續(xù)操作
    3. 進(jìn)入修復(fù)模式,執(zhí)行chroot /mnt/sysimage ,df -h顯示原來(lái)的文件系統(tǒng)
    chroot /mnt/sysimage
    df -h
    
    1. 對(duì)異常的分區(qū)進(jìn)行檢測(cè)并修復(fù),根據(jù)文件系統(tǒng)類型執(zhí)行
    umount /dev/sda3
    fsck.ext4 /dev/sda3 -y
    
    1. 修復(fù)完成后重啟系統(tǒng)
    reboot
    
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • 目錄磁盤結(jié)構(gòu)磁盤分區(qū)磁盤分區(qū)管理文件系統(tǒng)管理掛載 一、磁盤結(jié)構(gòu) (一)設(shè)備文件 設(shè)備文件:linux系統(tǒng)下一切皆文...
    哈嘍別樣閱讀 1,019評(píng)論 0 0
  • 1 概述 本文通過(guò)對(duì)講解了磁盤的基本概念,分區(qū),創(chuàng)建文件系統(tǒng),掛載,卸載等步驟進(jìn)行講解。使得用戶能夠創(chuàng)建基本的磁盤...
    ghbsunny閱讀 1,567評(píng)論 0 0
  • 一. 什么是磁盤 絕大多數(shù)人對(duì)硬盤都不陌生,一塊小小的硬盤里,就可以存儲(chǔ)海量的照片、音樂(lè)和電影等,尤其是你們喜愛(ài)的...
    唯愛(ài)熊閱讀 1,820評(píng)論 0 5
  • 計(jì)算機(jī)組由CPU, Memory(RAM), I/O設(shè)備組成 I/O: Disks, Ehtercard(以太網(wǎng)卡...
    SRE1閱讀 407評(píng)論 0 0
  • 黃大豆2008閱讀 213評(píng)論 1 1