計(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ū),操作如下:
- parted -s /dev/sdc mklabel gpt:設(shè)置分區(qū)類型為gpt格式
- mkfs.ext3 /dev/sdc:基于ext3文件系統(tǒng)類型格式化
- 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ù)步驟:
- 遠(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
- 可以重新掛載/系統(tǒng),掛載命令如下,測(cè)試文件系統(tǒng)是否可以讀寫
mount -o remount,rw /
- 如果重新掛載/系統(tǒng)無(wú)法解決問(wèn)題,則重啟CD/DVD光盤引導(dǎo)進(jìn)入Linux Rescue修復(fù)模式.光標(biāo)選擇Troubleshooting,按Enter鍵,然后選擇Rescue a CentOS system,按Enter鍵
- 選擇1)"continue"繼續(xù)操作
- 進(jìn)入修復(fù)模式,執(zhí)行chroot /mnt/sysimage ,df -h顯示原來(lái)的文件系統(tǒng)
chroot /mnt/sysimage df -h
- 對(duì)異常的分區(qū)進(jìn)行檢測(cè)并修復(fù),根據(jù)文件系統(tǒng)類型執(zhí)行
umount /dev/sda3 fsck.ext4 /dev/sda3 -y
- 修復(fù)完成后重啟系統(tǒng)
reboot