Linux磁盤管理
硬盤的物理組成
柱面
硬盤與讀存數據相關的部件:圓形硬盤片(一或多個)、磁頭、機械臂。 硬盤片上有磁道,多個硬盤片上的同一磁道形成柱面,這個柱面就是分區時形成的最小單位,windows的C盤(系統盤)分區就是在最外層的一堆柱面上。
扇區
硬盤上的最小存儲單位叫扇區,每個扇區儲存512字節。在讀取數據的時候,硬盤會轉動,利用機械手臂將磁頭移動到正確的數據位置,然后將數據順序讀出。
硬盤的類型/dev/sda VS /dev/hda
HDA是使用了ide接口的硬盤的名稱.SDA是sata接口的硬盤的名稱
硬盤接口
我們通過硬盤接口來區分不同的硬盤,不同廠商生產的硬盤都要通過sata接口接入到主板的sata控制器上。使用SATA(Serial ATA)口的硬盤又叫串口硬盤,是未來和現在PC機硬盤的主流趨勢。 硬盤接口有: 并口:(數據傳輸有n根線并行傳輸) IDE(電子集成驅動器):133M/S SCSI(小型計算機系統接口):640M/S 串口:(數據傳輸有一根線按順序傳輸) SATA(串口硬盤接口):6Gbps SAS(串行連接SCSI):6Gbps USB:480MB/s
分區和目錄關系
-
任何一個分區都必須掛載到某個目錄上。
-
目錄是邏輯上的區分。分區是物理上的區分。
-
磁盤Linux分區都必須掛載到目錄樹中的某個具體的目錄上才能進行讀寫操作。
-
根目錄是所有Linux的文件和目錄所在的地方,需要掛載上一個磁盤分區。
分區
為什么要分區
-
可以把不同資料,分別放入不同分區中管理,降低風險。
-
大硬盤搜索范圍大,效率低
-
磁盤配合只能對分區做設定
-
/home /var /usr/local經常是單獨分區,因為經常會操作,容易產生碎片
分區的要點:
記錄每一個分區的起始和結束柱面。分區的起始和結束柱面的數據放在主導區(Master Boot Recorder,MBR)。MBR不屬于任何分區,計算機啟動后最先讀取主導區,這個區域記錄硬盤的分區信息。MBR的限制是不能存儲所有的分區和引導程序的信息,最多提供4個分區的記憶。
MBR處在0sector,分為三個部分: 446bytes:boot loader程序,引導啟動操作系統程序 64bytes:FAT文件系統分區表,每16個字節表示一個分區 2bytes:MBR區域的有效性標識,55AA表示為有效
分區管理fdisk命令
分區類別:
查看:fdisk -l [DEVICE] 創建分區:fdisk [DEVICE] 查看內核是否識別新的分區:cat /proc/partitions 對于已經有分區處于使用的磁盤來說,新建分區要讓內核重讀分區:
centos5之上: #partprobe [DEVICE] centos 6和7: #part -a [DEVICE] #kpartx -af [DEVICE] n:新建分區 p:顯示分區表 d:刪除分區 b:設置卷標 w:寫入分區表 t:改變分區文件系統類型 l:顯示fdisk所支持的文件系統代碼 q:退出
文件系統管理
文件系統分類
常用的Linux文件系統:ext2,ext3,ext4,xfs,btrfs,reiserfs,jfs,swap
交換文件系統:swap
網絡文件系統:nfs,smbfs
光盤文件系統:isso9660
文件系統的物理結構
super block:超級塊的作用是存儲文件系統大小、有多少是空的和已經填滿的占多少,以及它們各自的總數和其他信息。要使用一個分區來進行數據訪問,那么第一個要訪問的就是超級塊。所以超級塊壞了,磁盤就沒救了。
文件系統大小 空閑塊數目 空閑塊索引表 空閑i節點數 空閑i節點索引表 ……
文件存儲結構
Linux正統的文件系統(如ext2、ext3)一個文件由目錄項、inode和數據塊組成。
-
目錄項:包括文件名和inode節點號。
-
Inode:又稱文件索引節點,是文件基本信息的存放地和數據塊指針存放地。
-
數據塊:文件的具體內容存放地。
文件系統管理
文件系統管理工具
-
創建文件系統的工具
mkfs mkfs.ext2, mkfs.ext3, mkfs.ext4, mkfs.xfs, mkfs.vfat, ...
-
檢測及修復文件系統的工具
fsck fsck.ext2, fsck.ext3, ...
-
查看其屬性的工具
dumpe2fs, tune2fs
-
調整文件系統特性:
tune2fs
ext系列文件系統的管理工具:
-
創建文件系統的工具
mkfs mkfs.ext2, mkfs.ext3, mkfs.ext4 mkfs -t ext4=mkfs.ext4
-
ext系列文件系統專用管理工具
mke2fs [OPTIONS] device -t {ext2|ext3|ext4}:指明要創建的文件系統類型 mkfs.ext4 = mkfs -t ext4 = mke2fs -t ext4 -b {1024|2048|4096}:指明文件系統的塊大?。? -L LABEL:指明卷標; -j:創建有日志功能的文件系統ext3; mke2fs -j = mke2fs -t ext3 = mkfs -t ext3 = mkfs.ext3 -i #:bytes-per-inode,指明inode與字節的比率;即每多少字節創建一個Indode; -N #:直接指明要給此文件系統創建的inode的數量; -m #:指定預留的空間,百分比; -O [^]FEATURE:以指定的特性創建目標文件系統;
e2label命令:卷標的查看與設定 查看:e2label device 設定:e2label device LABEL
tune2fs命令:查看或修改ext系列文件系統的某些屬性 adjust tunable filesystem parameters on ext2/ext3/ext4 filesystems; 注意:塊大小創建后不可修改; tune2fs [OPTIONS] device -l:查看超級塊的內容; 修改指定文件系統的屬性: -j:ext2 --> ext3; -L LABEL:修改卷標; -m #:調整預留空間百分比; -O [^]FEATHER:開啟或關閉某種特性; -o [^]mount_options:開啟或關閉某種默認掛載選項 acl ^acl
dumpe2fs命令:顯示ext系列文件系統的屬性信息 dumpe2fs [-h] device
e2fsck : check a Linux ext2/ext3/ext4 file system e2fsck [OPTIONS] device -y:對所有問題自動回答為yes; -f:即使文件系統處于clean狀態,也要強制進行檢測;
fsck:check and repair a Linux file system -t fstype:指明文件系統類型; fsck -t ext4 = fsck.ext4 -a:無須交互而自動修復所有錯誤; -r:交互式修復;
blkid命令: blkid device blkid -L LABEL:根據LABEL定位設備 blkid -U UUID:根據UUID定位設備
swap文件系統:
Linux上的交換分區必須使用獨立的文件系統; 且文件系統的System ID必須為82; 創建swap設備:mkswap命令 mkswap [OPTIONS] device -L LABEL:指明卷標 -f:強制 啟用:swapon swapon [OPTION] [DEVICE] -a:定義在/etc/fstab文件中的所有swap設備; 禁用:swapoff swapoff DEVICE
文件系統的使用:
文件系統的使用首先要掛載:mount命令和umount命令。根文件系統這外的其它文件系統要想能夠被訪問,都必須通過“關聯”至根文件系統上的某個目錄來實現,此關聯操作即為“掛載”;此目錄即為“掛載點”
掛載點:mount_point,用于作為另一個文件系統的訪問入口;
(1) 事先存在; (2) 應該使用未被或不會被其它進程使用到的目錄; (3) 掛載點下原有的文件將會被隱藏;
mount命令:
mount [-nrw] [-t vfstype] [-o options] device dir 命令選項: -r:readonly,只讀掛載; -w:read and write, 讀寫掛載; -n:默認情況下,設備掛載或卸載的操作會同步更新至/etc/mtab文件中;-n用于禁止此特性; -t vfstype:指明要掛載的設備上的文件系統的類型;多數情況下可省略,此時mount會通過blkid來判斷要掛載的設備的文件系統類型; -L LABEL:掛載時以卷標的方式指明設備; mount -L LABEL dir -U UUID:掛載時以UUID的方式指明設備; mount -U UUID dir -o options:掛載選項 sync/async:同步/異步操作; atime/noatime:文件或目錄在被訪問時是否更新其訪問時間戳; diratime/nodiratime:目錄在被訪問時是否更新其訪問時間戳; remount:重新掛載; acl:支持使用facl功能; # mount -o acl device dir # tune2fs -o acl device ro:只讀 rw:讀寫 dev/nodev:此設備上是否允許創建設備文件; exec/noexec:是否允許運行此設備上的程序文件; auto/noauto: user/nouser:是否允許普通用戶掛載此文件系統; suid/nosuid:是否允許程序文件上的suid和sgid特殊權限生效; defaults:Use default options: rw, suid, dev, exec, auto, nouser, async, and relatime.
查看當前系統所有已掛載的設備:
# mount # cat /etc/mtab # cat /proc/mounts
umount命令:
umount device|dir 注意:正在被進程訪問到的掛載點無法被卸載; 查看被哪個或哪些進程所戰用: # lsof MOUNT_POINT # fuser -v MOUNT_POINT 終止所有正在訪問某掛載點的進程: # fuser -km MOUNT_POINT
設定除根文件系統以外的其它文件系統能夠開機時自動掛載:/etc/fstab文件,該文件的語法格式如下:
每行定義一個要掛載的文件系統及相關屬性: 6個字段: (1) 要掛載的設備: 設備文件; LABEL UUID 偽文件系統:如sysfs, proc, tmpfs等 (2) 掛載點 swap類型的設備的掛載點為swap; (3) 文件系統類型; (4) 掛載選項 defaults:使用默認掛載選項; 如果要同時指明多個掛載選項,彼此間以事情分隔; defaults,acl,noatime,noexec (5) 轉儲頻率 0:從不備份; 1:每天備份; 2:每隔一天備份; (6) 自檢次序 0:不自檢; 1:首先自檢,通常只能是根文件系統可用1; 2:次級自檢 ... mount -a:可自動掛載定義在此文件中的所支持自動掛載的設備;
文件系統掛載使用:掛載光盤設備: 光盤設備文件: IDE: /dev/hdc SATA: /dev/sr0 符號鏈接文件: /dev/cdrom /dev/cdrw /dev/dvd /dev/dvdrw mount -r /dev/cdrom /media/cdrom umount /dev/cdrom dd命令:convert and copy a file 用法: dd if=/PATH/FROM/SRC of=/PATH/TO/DEST bs=#:block size, 復制單元大小; count=#:復制多少個bs; 磁盤拷貝: dd if=/dev/sda of=/dev/sdb 備份MBR dd if=/dev/sda of=/tmp/mbr.bak bs=512 count=1 破壞MBR中的bootloader: dd if=/dev/zero of=/dev/sda bs=256 count=1 兩個特殊設備: /dev/null: 數據黑洞; /dev/zero:吐零機;
掛載點和/etc/fstab
作用:
配置文件系統體系
被mount、fsck和其他程序使用
系統重啟時保留文件系統體系
可以在設備欄使用文件系統卷邊
使用mount -a 命令掛載/etc/fstab中所有的文件系統
實例演示:
增加兩個邏輯分區,一個交換分區,并配置到/etc/fstab下
1.查看分區情況:fdisk -l
2.建立兩個邏輯分區,過程省略
3.建立交換分區
查看swap大?。╢ree -k|-m|-G)
創建一個swap分區
這是創建了1個一個擴展分區,三個邏輯分區,現在將sda7轉化為swap分區
創建完了之后,我們用mkswap命令格式化我們的新分區。
然后我們都做好分區用blkid后看一下
接著配置掛載
開機重啟,mount -a之后,df -h,可以看到掛載成功
筆者,再配置swap分區的時候出了一點問題,我在創建系統的時候 建立了一個swap分區 后來 我又建立了一個swap分區 并且配置fstab文件,配置沒有顯示我掛載到指定目錄,然后我用同樣的方法 測試了一下 普通分區 配置fstab文件,成功了 ,開機啟動看到了掛載在我指定的目錄下,現在我把 原來配置的swap 分區去掉 比較前后兩次的swap 總數,發現不一樣 ,論證了 如果掛載兩個swap分區 會合并在一起。得出結論是,最好只要一個swap。
操作練習
1、創建一個20G的文件系統,塊大小為2048,文件系統ext4,卷標為TEST,要求此分區開機后自動掛載至/testing目錄,且默認有acl掛載選項;
(1) 創建20G分區; (2) 格式化: mke2fs -t ext4 -b 2048 -L 'TEST' /dev/DEVICE (3) 編輯/etc/fstab文件 LABEL='TEST' /testing ext4 defaults,acl 0 0
2、創建一個5G的文件系統,卷標HUGE,要求此分區開機自動掛載至/mogdata目錄,文件系統類型為ext3;
3、寫一個腳本,完成如下功能: (1) 列出當前系統識別到的所有磁盤設備; (2) 如磁盤數量為1,則顯示其空間使用信息;否則,則顯示最后一個磁盤上的空間使用信息;
if [ $disks -eq 1 ]; then fdisk -l /dev/[hs]da else fdisk -l $(fdisk -l /dev/[sh]d[a-z] | grep -o "^Disk /dev/[sh]d[a-]" | tail -1 | cut -d' ' -f2) fi
原創文章,作者:N24_yezi,如若轉載,請注明出處:http://www.www58058.com/60362
用自己的方式來理解知識,往往是最容易掌握的,加油。