文章目錄
- 計算機硬碟簡介
- 硬碟Block和indoe詳解
- 硬鏈接介紹
- 軟鏈接介紹
- 磁盤磁區實戰操作
- MOUNT命令工具
- Mount命令引數詳解
- 企業常用Mount案例
- 總結
計算機硬碟簡介
-
硬碟是計算機主要存盤媒介之一,由一個或者多個鋁制或者玻璃制的碟片組成,碟片外覆寫有鐵磁性材料,硬碟內部由磁道、柱面、扇區、磁頭等部件組成
-
Linux系統中硬體設備相關組態檔存放在
/dev/下,常見硬碟命名:/dev/hda、/dev/sda、/dev/sdb、/dev/sdc、/dev/vda,不同硬碟介面,在系統中識別的設備名稱不一樣, -
IDE硬碟介面在Linux中設備名為/dev/hda,SAS、SCSI、SATA硬碟介面在Linux中設備名為sda,高效云盤硬碟介面會識別為/dev/vda等, -
檔案儲存在硬碟上,
硬碟的最小存盤單位叫做Sector(扇區),每個Sector儲存512位元組,作業系統在讀取硬碟的時候,不會逐個Sector的去讀取,這樣效率非常低,為了提升讀取效率,作業系統會一次性連續讀取多個Sector,即一次性讀取多個Sector稱為一個Block(塊, -
由多個Sector組成的Block是檔案存取的最小單位,Block的大小常見的有
1KB、2KB、4KB,Block在Linux中常設定為4KB,即連續八個Sector組成一個Block, -
/boot磁區Block一般為1KB,而/data/磁區或者/磁區的Block為4K -
linux 系統查看磁區的Block大小方法:
[root@hbs ~]# stat anaconda-ks.cfg |grep -i "block" Size: 1511 Blocks: 8 IO Block: 4096 regular file [root@hbs ~]# [root@hbs ~]# stat /boot/|grep "IO Block" Size: 4096 Blocks: 8 IO Block: 4096 directory [root@hbs ~]#
硬碟Block和indoe詳解
-
通常而言,作業系統對于檔案資料的存放包括三個部分:
- 檔案內容
- 權限
- 檔案屬性
-
作業系統檔案存放是基于檔案系統,
檔案系統會將檔案的實際內容存盤到Block中,而將權限與屬性等資訊存放至Inode中, -
在硬碟磁區中,還有一個
超級區塊 (SuperBlock) ,SuperBlock會記錄整個檔案系統的整體資訊,包括 Inode、Block 總量、使用大小、剩余大小等資訊,每個 inode 與 block 都有編號對應,方便Linux系統快速定位查找檔案, -
Superblock:記錄檔案系統的整體資訊,包括inode與block的總量、使用大小、剩余大小, 以及檔案系統的格式與相關資訊等;
-
Inode:記錄檔案的屬性,權限,同時會記錄該檔案的資料所在的block編號;
-
Block:存盤檔案的內容,如果檔案超過默認Block大小,會自動占用多個Block,
-
作業系統進行格式化磁區時,作業系統自動將硬碟分成兩個區域,一個是資料Block區,用于存放檔案資料;另一個是Inode Table區,用于存放inode包含的元資訊,
-
每個inode節點的大小,可以在格式化時指定,默認為128Bytes或256Bytes,/boot磁區Inode默認為128Bytes,其他磁區默認為256Bytes,查看Linux系統Inode方法如下:
[root@hbs ~]# stat /boot/|grep "Inode" Device: 801h/2049d Inode: 64 Links: 5 [root@hbs ~]# -
格式化磁盤時,可以指定默認Inode和Block的大小,-b指定默認Block值,-I指定默認Inode值,命令如下:
[root@hbs ~]# mkfs.ext4 -b 4096 -I 256 /dev/sdc
硬鏈接介紹
-
一般情況下,檔案名和inode編號是一一對應的關系,每個inode號碼對應一個檔案名,
-
但UNIX/Linux系統多個檔案名也可以指向同一個inode號碼,這意味著可以用不同的檔案名訪問同樣的內容,對檔案內容進行修改,會影響到所有檔案名,
-
但洗掉一個檔案名,不影響另一個檔案名的訪問,這種情況就被稱為硬鏈接(hard link),
-
創建硬鏈接的命令:
[root@hbs ~]# touch ha123 [root@hbs ~]# ll ha123 -rw-r--r-- 1 root root 0 Mar 29 21:40 ha123 檔案名總數1 [root@hbs ~]# ln ha123 liuaoni.txt 其中ha123為源檔案,liuaoni.txt為目標檔案 [root@hbs ~]# ll ha123 -rw-r--r-- 2 root root 0 Mar 29 21:12 ha123 檔案名總數加1變2了 [root@hbs ~]# 源檔案與目標檔案的inode號碼相同,都指向同一個inode, inode資訊中 有一項叫做"鏈接數",記錄指向該inode 的檔案名總數,這時會增加1,變成2, 同樣洗掉一個liuaoni.txt檔案,就會使得ha123 inode節點中 的"鏈接數"減1,如果該inode值減到0,表明沒有檔案名指向 這個inode,系統就會回收這個inode號碼,以及其所對應block區域 [root@hbs ~]# ll ha123 liuaoni.txt -rw-r--r-- 2 root root 0 Mar 29 21:40 ha123 -rw-r--r-- 2 root root 0 Mar 29 21:40 liuaoni.txt [root@hbs ~]# rm -rf liuaoni.txt [root@hbs ~]# ll ha123 -rw-r--r-- 1 root root 0 Mar 29 21:40 ha123 [root@hbs ~]#
軟鏈接介紹
-
除了硬鏈接以外,還有一種鏈接-軟鏈接,檔案ha123和檔案liuaoni.txt的inode號碼雖然不一樣,但是檔案liuaoni.txt的內容是檔案ha123的路徑,
讀取檔案liuaoni.txt時,系統會自動將訪問者導向檔案ha123, -
無論打開哪一個檔案,最終讀取的都是檔案ha123,這時,檔案liuaoni.txt就稱為檔案ha123的"軟鏈接"(soft link)或者"符號鏈接(symbolic link),
-
檔案liuaoni.txt依賴于檔案ha123而存在,如果洗掉了檔案ha123,打開檔案liuaoni.txt就會報錯:“No such file or directory”,
-
軟鏈接與硬鏈接最大的不同是檔案liuaoni.txt指向檔案ha123的檔案名,而不是檔案ha123的inode號碼,因此檔案ha123的inode鏈接數不會發生變化
[root@hbs ~]# touch ha123 [root@hbs ~]# touch liuaoni.txt [root@hbs ~]# ls -li ha123 33574983 -rw-r--r-- 1 root root 0 Apr 1 11:43 ha123 [root@hbs ~]# ln -s ha123 liuaoni.txt ln: failed to create symbolic link ‘liuaoni.txt’: File exists- 這里提示連接已存在,解決方案,直接覆寫它
[root@hbs ~]# ln -sf ha123 liuaoni.txt -
洗掉了 ha123 ,luiaoni.txt檔案還是存在,但是是空的,顯示為紅色
[root@hbs ~]# ll -li ha123 liuaoni.txt 33574983 -rw-r--r-- 1 root root 0 Apr 1 11:43 ha123 33631176 lrwxrwxrwx 1 root root 5 Apr 1 11:45 liuaoni.txt -> ha123 [root@hbs ~]# rm -rf ha123 [root@hbs ~]# ll -li liuaoni.txt 33631176 lrwxrwxrwx 1 root root 5 Apr 1 11:45 liuaoni.txt -> ha123 [root@hbs ~]#
磁盤磁區實戰操作
企業真實場景由于硬碟常年大量讀寫,經常會出現壞盤,需要更換硬碟,或者由于磁盤空間不足,需添加新硬碟,新添加的硬碟需要經過格式化、磁區才能被Linux系統所使用,虛擬機CentOS 7 Linux模擬DELL R730真實服務器添加一塊新硬碟,不需要關機,直接插入用硬碟即可,一般硬碟均支持熱插拔功能,企業中添加新硬碟的操作流程如下
-
檢測Linux系統識別的硬碟設備,新添加硬碟被識別為/dev/sdb,如果有多塊硬碟,會依次識別成/dev/sdc、/dev/sdd等設備名稱
[root@localhost ~]# ll /dev/sd* brw-rw---- 1 root disk 8, 0 Mar 29 17:22 /dev/sda brw-rw---- 1 root disk 8, 1 Mar 29 17:22 /dev/sda1 brw-rw---- 1 root disk 8, 2 Mar 29 17:22 /dev/sda2 brw-rw---- 1 root disk 8, 3 Mar 29 17:22 /dev/sda3 brw-rw---- 1 root disk 8, 16 Mar 29 17:22 /dev/sdb -
基于新硬碟/dev/sdb設備,創建磁盤磁區/dev/sdb1
[root@localhost ~]# fdisk /dev/sdb Welcome to fdisk (util-linux 2.23.2). Changes will remain in memory only, until you decide to write the Be careful before using the write command. Device does not contain a recognized partition table Building a new DOS disklabel with disk identifier 0x529a757c. Command (m for help): 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 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): p 選擇主磁區 Partition number (1-4, default 1): 1 編號 First sector (2048-41943039, default 2048): Using default value 2048 Last sector, +sectors or +size{K,M,G} (2048-41943039, default 41943039): +1G 磁區大小1G Partition 1 of type Linux and of size 1 GiB is set Command (m for help): w 保存退出 The partition table has been altered! Calling ioctl() to re-read partition table. Syncing disks. 如果創建出錯了,可以按 d 洗掉錯誤磁區 -
重繪磁盤,查看以磁區的情況
[root@localhost ~]# partprobe [root@localhost ~]# fdisk -l|tail -10 Disk identifier: 0x529a757c Device Boot Start End Blocks Id System /dev/sdb1 2048 2099199 1048576 83 Linux Disk /dev/mapper/centos-swap: 536 MB, 536870912 bytes, 1048576 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 -
/dev/sdb1磁區格式化,使用mount命令掛載到/data/目錄
[root@localhost ~]# mkfs.ext4 /dev/sdb1 mke2fs 1.42.9 (28-Dec-2013) Filesystem label= OS type: Linux Block size=4096 (log=2) Fragment size=4096 (log=2) Stride=0 blocks, Stripe width=0 blocks 65536 inodes, 262144 blocks 13107 blocks (5.00%) reserved for the super user First data block=0 Maximum filesystem blocks=268435456 8 block groups 32768 blocks per group, 32768 fragments per group 8192 inodes per group Superblock backups stored on blocks: 32768, 98304, 163840, 229376 Allocating group tables: done Writing inode tables: done Creating journal (8192 blocks): done Writing superblocks and filesystem accounting information: done [root@localhost ~]# [root@localhost ~]# mkdir -p /date 創建掛在目錄 [root@localhost ~]# mount /dev/sdb1 /date/ 掛載/dev/sdb1磁區至/data/目錄 [root@localhost ~]# df -h 查看磁盤磁區詳情 Filesystem Size Used Avail Use% Mounted on /dev/sda3 30G 1.1G 29G 4% / devtmpfs 1.9G 0 1.9G 0% /dev tmpfs 1.9G 0 1.9G 0% /dev/shm tmpfs 1.9G 8.6M 1.9G 1% /run tmpfs 1.9G 0 1.9G 0% /sys/fs/cgroup /dev/sda1 197M 121M 77M 62% /boot tmpfs 378M 0 378M 0% /run/user/0 /dev/sdb1 976M 2.6M 907M 1% /date [root@localhost ~]# [root@localhost ~]# echo "mount /dev/sdb1 /date/" >>/etc/rc.local 將掛載磁區命令加入/etc/rc.local開機啟動 -
自動掛載磁區除了可以加入到/etc/rc.local開機啟動之外,還可以加入到/etc/fstab檔案中
[root@localhost ~]# blkid /dev/sr0: UUID="2017-09-06-10-51-00-00" LABEL="CentOS 7 x86_64" TYPE="iso9660" PTTYPE="dos" /dev/sda1: UUID="e2a88a04-a2f1-44d1-b77b-517ea61a0735" TYPE="xfs" /dev/sda2: UUID="wubYdM-dwdE-k7hm-Pf5Q-OIDE-oW49-BJflyB" TYPE="LVM2_member" /dev/sda3: UUID="26a3bd57-2e86-419c-850a-231b282be9ea" TYPE="xfs" /dev/sdb1: UUID="f98425af-9afa-42d9-a1fd-305d37833587" TYPE="ext4" /dev/mapper/centos-swap: UUID="ae570ad5-531e-436a-bedf-5f5df71036a0" TYPE="swap" [root@localhost ~]# vim /etc/fstab [root@localhost ~]# tail -3 /etc/fstab UUID=e2a88a04-a2f1-44d1-b77b-517ea61a0735 /boot xfs defaults 0 0 /dev/mapper/centos-swap swap swap defaults 0 0 UUID="f98425af-9afa-42d9-a1fd-305d37833587" /date ext4 defaults 0 0 # /dev/sdb1 /date ext4 defaults 0 0 這樣寫也可以,寫UUID可以可以 -
查看磁盤磁區情況
[root@localhost ~]# lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 30G 0 disk ├─sda1 8:1 0 200M 0 part /boot ├─sda2 8:2 0 515M 0 part │ └─centos-swap 253:0 0 512M 0 lvm [SWAP] └─sda3 8:3 0 29.3G 0 part / sdb 8:16 0 20G 0 disk └─sdb1 8:17 0 1G 0 part /date sr0 11:0 1 4.2G 0 rom [root@localhost ~]#MOUNT命令工具
-
Mount命令工具主要用于將設備或者磁區掛載至Linux系統目錄下,Linux系統在磁區時,也是基于mount機制將/dev/sda磁區掛載至系統目錄,將設備與目錄掛載之后,Linux作業系統方可進行檔案的存盤,
Mount命令引數詳解
handlebars
mount [-Vh]
mount -a [-fFnrsvw] [-t vfstype]
mount [-fnrsvw] [-o options [,...]] device | dir
mount [-fnrsvw] [-t vfstype] [-o options] device dir
-V: 顯示mount工具版本號;
-l: 顯示已加載的檔案系統串列;
-h: 顯示幫助資訊并退出;
-v: 輸出指令執行的詳細資訊;
-n: 加載沒有寫入檔案/etc/mtab中的檔案系統;
-r: 將檔案系統加載為只讀模式;
-a: 加載檔案/etc/fstab中配置的所有檔案系統;
-o: 指定mount掛載擴展引數,常見擴展指令:rw、remount、loop等,其中-o相關指令如下:
-o atime: 系統會在每次讀取檔案時更新檔案時間;
-o noatime: 系統會在每次讀取檔案時不更新檔案時間;
-o defaults: 使用預設的選項 rw,suid,dev,exec,auto,nouser等;
-o exec 允許執行檔被執行;
-o user、-o nouser: 使用者可以執行 mount/umount的動作;
-o remount: 將已掛載的系統磁區重新以其他再次模式掛載;
-o ro: 只讀模式掛載;
-o rw: 可讀可寫模式掛載;
-o loop 使用loop模式,把檔案當成設備掛載至系統目錄,
-t: 指定mount掛載設備型別,常見型別nfs、ntfs-3g、vfat、iso9660等,其中-t相關指令如下:
iso9660 光碟或光碟鏡像;
msdos Fat16檔案系統;
vfat Fat32檔案系統;
ntfs NTFS檔案系統;
ntfs-3g 識別移動硬碟格式;
smbfs 掛載Windows檔案網路共享;
nfs Unix/Linux檔案網路共享,
企業常用Mount案例
mount /dev/sdb1 /data 掛載/dev/sdb1磁區至/data/目錄
mount /dev/cdrom /mnt 掛載Cdrom光碟至/mnt目錄;
mount -t ntfs-3g /dev/sdc /data1 掛載/dev/sdc移動硬碟至/data1目錄;
mount -o remount,rw / 重新以讀寫模式掛載/系統;
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.10.11:/data/ /mnt 將遠程192.168.10.11:/data目錄掛載至本地/mnt目錄,
總結
-
磁盤磁區最多只能分 4個主磁區
-
還有一種就是 3個主磁區,一個擴展磁區,
-
擴展磁區不能直接使用,需要變成邏輯磁區
-
fdisk磁區命令引數如下,常用引數包括m、n、p、e、d、w,
b 編輯bsd disklabel; c 切換dos兼容性標志; d 洗掉一個磁區; g 創建一個新的空GPT磁區表; G 創建一個IRIX(SGI)磁區表; l 列出已知的磁區型別; m 列印幫助選單; n 添加一個新磁區; o 創建一個新空DOS磁區表; p 列印磁區表資訊; q 退出而不保存更改; s 創建一個新的空的Sun磁盤標簽; t 更改磁區的系統ID; u 更改顯示/輸入單位; v 驗證磁區表; w 將磁區表寫入磁盤并退出; x 額外功能,-
磁區工具有fdisk和gdisk,當硬碟小于2T的時候我們應該用fdisk來磁區,而當硬碟大于2T的時候則應用gdisk來進行磁區
-
Block空間即將被占滿, 但洗掉大檔案也沒有釋放空間
- 假設現在線上正在運行Nginx服務, Nginx產生的日志已經達到了20個G, 磁盤眼看就看沾滿了, 請問不重啟Nginx的方式如何處理
- 是會洗掉檔案, 但Nginx持續占用著檔案, 所以空間并不會被釋放
rm -f access.log 正確做法如下, 清空該檔案即可釋放檔案內容> access.log
-
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/271498.html
標籤:其他
上一篇:在Linux里建立一個快捷方式,直接鏈接到另一個目錄
下一篇:Nginx網頁與安全優化
