磁盤分區及創建文件系統
磁盤分區及創建文件系統
機械式硬盤
1.平均尋道時間:ns
2.磁盤轉速:rpm 5400 7200 10000rpm 15000rpm
track:磁道
sector:扇區,512Bytes,現在我們所說的扇區實際上是平均值
cylinder:柱面,從磁道向所有盤面做投影
partition:分區,基於柱面來劃分的存儲空間
head:磁頭,每個磁盤表面都有一個磁頭
設備文件:/dev
設備文件是關聯到硬件設備的驅動程序和設備的訪問入口
設備號:
major:主設備號,區分設備的類型,用於標明設備所需的驅動程序
mijor:次設備號,區分兩種類型下的不同設備,是特定設備的訪問入口
mknod命令:
mknod - make block or character special files 制造一個塊或者字符類型的文件
mknod [OPTION]... NAME TYPE [MAJOR MINOR]
設備類型:
塊設備:b(block) 用於隨機訪問的設備,數據存儲和交換的單位是塊。
字符設備:c(character) 用於線性訪問的設備,數據的交換單位一般是字符。
設備文件名:IANA--->ICANN
所有設備放在/dev/下面
IDE:hd[a-d]
SCSI/SATA/SAS/USB:sh[a-z] sdab
RHEL,Centos6開始:所有的接口類型的硬盤設備統一命名為sd[a-z]
設備的引用方式:
設備的文件名
卷標(Volume Lable)
UUID:全局唯一標識符,128bit
如何使用一個新的硬盤設備?
分區
創建文件系統(格式化)
掛載分區
為何分區?
1.優化I/O性能
2.實現磁盤空間的配額限制
3.可以進行高速修復
4.隔離系統文件和其他程序文件
5.安裝多個操作系統
如何分區?
MBR分區:硬盤空間小於2TB
MBR:Master(Main) Boot Record,主引導記錄,起源於1982年。
0磁道0扇區:整個磁盤的最開始的位置 512Byte
446Byte:boot loader,引導加載程序,默認是GRUB
64Byte:Partition table,分區表,每16Bytes表明一個分區的內容:因此一個有四個主分區
註意:
1.主分區加擴展分區最多可以有四個,其分區表位的編號依次為1.2.3.4
2.邏輯分區的編號從5開始,不管前面的四個數字編號是否被占用
2Bytes:結束標記,55AA
GBT分區:硬盤空間大於2TB
GUID Partition Table, GUID分區表,支持128個分區
UEFI(統一擴展固件接口)的硬盤可以支持GPT
通常使用的分區工具:
fdisk:用於管理和創建MBR分區,對於一塊硬盤來說只能管理十五個分區
gdisk:GNU disk 用於創建和管理GPT分區
如果使用fdisk或者gdisk命令對於已有分區並掛載使用的磁盤的剩余空間進行再次分區的信息,即便是保存了,也不會被內核重新讀取,如果要讓內核識別此類分區:
1.重啟計算機
2.partprobe命令或者partx命令強制內核重讀分區表,
在centos5/7 partprobe [device] 如果省略了設備名,則表示重讀所有磁盤的分區表
在centos6/7 partx -a [device]
kpartx -af [device]
查看分區後內核有沒有識別的目錄: cat /proc/partitions
強制內核讀取分區後的信息:partprobe /dev/*
fdisk分區實例:
fdisk -l [-u] [device...] 查看指定磁盤的分區表,如果省略device參數,則顯示所有磁盤設備的分區表
fdisk device
fdisk子命令
d 刪除分區
l 顯示此磁盤的詳細信息
m 幫助菜單
n 添加分區
n的子命令
e 擴展分區
p 主分區
l 邏輯的
p 在交互模式中顯示分區表
q 不保存,退出編輯
t 修改Partition系統標識
w 保存並且退出
parted:GNU 高級分區工具,實時生效
parted - a partition manipulation program
parted [options] [device [command [options...]...]]
parted /dev/sdb mklabel gpt|msdos
parted /dev/sdb print
parted /dev/sdb mkpart primary 1 200
parted /dev/sdb rm 1
~]# echo ‘- - -‘ > /sys/class/scsi_host/host2/scan
強制內核識別在開機狀態下插上的SCSI接口的磁盤
寫一個腳本,將一個命令所依賴的共享庫文件復制到/mnt/sysroot/lib64目錄中,如果庫文件已經存在於目標目錄中,就不復制。
#!/bin/bash
#
DEST=/mnt/sysroot/lib64
if [ ! -d $DEST ] ; then
mkdir -p $DEST
fi
until [ "$CMD" == ‘quit‘ ] ; do
read -p "give me a command: " CMD
if which --skip-alias $CMD &> /dev/null ; then
for I in $(ldd $(which --skip-alias $CMD) | grep -o "/[^[:space:]]\+") ; do
SRCLIB=$(basename $I)
if [ ! -e ${DEST}${SRCLIB} ] ; then
cp $I $DEST
fi
done
else
echo "Command not invalid."
fi
done
4.30
創建文件系統:
FHS 文件系統層級標準
權限
文件的命名規則
為什麽創建文件系統?
平面分類管理
空間分類管理
創建文件系統實際上就是給分區進行存儲空間的邏輯編址。
格式化:
低級格式化
物理層面完成格式化,在磁盤設備出廠時,通過低級格式化來創建磁道,主要作用就是創建磁道
高級格式化
分區之後進行的,主要作用是用來創建文件系統,為分區構建邏輯編址單元
無論是簇還是塊都是將一個或者多個扇區組織在一起,共同完成數據存儲
簇: 512B 1024 2048 4096 8192 16384 32768 655536
塊:1024 2048 4096
註意:
1.一個塊只能放置一個文件的內容,一個文件可以占用多個塊
2.如果在某個分區中,將創建大量的小文件,把塊劃分的小一些,反之,塊就大一些
3.如果分區空間比較大,塊也應該大一些
在一個分區中創建了文件系統:
首先,會將分區劃分成大小相等的若幹塊
元數據塊
元數據---inode(index node)
文件的屬性:
文件的大小
文件的權限
文件的所有者
文件的時間戳
數據塊指針
存放元數據的固定的存儲空間稱為:inode
每個inode都有其對應的inode編號
數據塊
存放文件中所包含的流式數據
特殊文件:
設備文件:block special或者character special
僅僅是將元數據中的數據塊指針換成了設備號
符號鏈接文件:symbolic link
僅僅是將元數據中的數據塊指針換成了另一個文件的訪問路徑
這類文件只占據元數據區域,沒有數據塊占用。
隨著磁盤空間越來越大,我們劃分塊的數量也越來越多,我們管理起來也越來越不方便,劃分塊組可以解決該問題。
塊組:每個塊組有獨立的元數據塊和數據塊
存放數組的時候,以塊組內的數據塊優先選擇,如果塊數組內的數據塊不夠,可以通過存儲策略來請多個塊組協調存儲
超級塊:主要定義了有多少個塊組,以及每個塊組的邊界。
為了防止超級塊發生故障導致整個文件系統崩潰,要對超級塊進行冗余備份。
日誌區域:對於數據的寫入操作做記錄的塊,防止數據不一致
數據不一致通常都是由於不潔關機,不潔斷電導致的。
一個完整的文件系統:
超級塊, inode, inode bitmap, block bitmap, data block, journal block。
想要查找/var/log/messages文件的內容,是怎樣的過程?
首先查找/目錄inode編號,從元數據區域中找到對應inode,再讀取inode中的數據塊指針,找到存放/目錄內容的數據塊;
然後,在數據塊中查找名稱為var的文件名,如果有,就定位其inode編號,再到元數據區域中查找對應編號的inode,再根據數據塊指針找到保存var目錄內容的數據塊;
再然後,在該數據塊中查找名稱為log的文件名,如果有,就定位其inode編號,再到元數據區域中查找對應編號的inode,再根據數據塊指針找到保存log目錄內容的數據塊;
之後,在該數據塊中查找名稱為messages的文件名,如果有,就定位其inode編號,再到元數據區域總查找對應編號的inode,再根據數據塊指針找到messages文件對銀的數據塊,就可以讀取數據;
系統調用
Linux支持的文件系統
位於內核空間的文件系統驅動
1.內核的一部分
2.內核的模塊
位於用戶空間的文件系統管理應用程序
Linux自己的文件系統:
ext ext2 ext3 ext4(支持最大分區50TB,可以做根分區,可以做啟動分區)
xfs(目前為止企業級的64位文件系統,最大分區可以支持500TB,也可以做根和啟動分區)
reiserfs(良好的反刪除功能)
btrfs 平衡樹文件系統(技術預覽版)
光盤文件系統:iso9660
網絡文件系統:NFS CIFS
集群文件系統:gfs2 ocfs2
內核級的分布式文件系統:ceph
偽文件系統:proc sysfs tmpfs hugepagefs
Windows的文件系統:vfat vtfs
Unix文件系統:ufs ffs jfs zfs
交換分區文件系統:swap
用戶空間中的分布式文件系統:mogilefs moosefs glusterfs
對於不同的發行版的Linux:都有其默認的文件系統選擇:
RHEL centos
5 ext3
6 ext4
7 xfs
寫一個腳本,如果發現用戶hacker登錄,則將登錄時間和主機記錄於日誌/var/log/login.log中;
#!/bin/bash
#
if who | grep -q "\<hacker\>" ; then
for I in $(who | grep "\<hacker\>" | cut -d ‘ ‘ -f3-5 --output-delimiter=‘ ‘); do
echo -n $I >> /var/log/login.log
done
fi
管理文件系統:
創建文件系統:
mkfs
mkfs.ext3 mkfs.xfs mkfs.btrfs mkfs.ext2 mkfs.ext4
文件系統監測和修復系統:
fsck
fsck.ext3 fsxk.ext3 fsck.ext4
文件系統屬性查看工具:
dumpe2fs
文件系統的屬性調整工具:
tune2fs
創建文件系統工具:
mkfs命令:
mkfs - build a Linux filesystem
mkfs [options] [-t type] [fs-options] device [size]
mkfs -t ext2 /dev/sdb1
註意:
1.不要使用磁盤設備名稱和擴展分區設備作為mkfs命令的參數,如果使用磁盤設備作為mkfs的參數,所有的分區都被刪除。如果使用擴展分區作為mkfs的參數,所有的邏輯分區都將被刪除
2.能夠作為mkfs命令參數的設備,是主分區設備和邏輯分區設備
如果只是計劃創建ext系列文件系統的話,可以使用mke2fs命令:
mke2fs:
mke2fs - create an ext2/ext3/ext4 filesystem
常用選項:
-b block-size 在創建文件系統時,調整塊的大小
-i bytes-per-inode 指明inode與字節的比率,即:多少個字節可以建一個inode,默認為16384
-j 創建有日誌功能的文件系統,就是ext3
-N number-of-inodes 直接指明要給此文件系統創建的inode的數量
-m reserved-blocks-percentage 指定為超級用戶root保留的磁盤空間的百分比,默認值是5
-t fs-type 指定文件系統類型 ext2 ext3 ext4 默認是ext2
-O [^] feature[,...] 關閉或者開啟文件系統的特性
-L volume-label 為文件系統指定卷標
-F 強制創建文件系統
-E 用戶指定的額外文件系統屬性
如果只是想要修改ext文件系統的卷標,可以使用e2label命令
e2label - Change the label on an ext2/ext3/ext4 filesystem
e2label device [ new-label ]
註意:如果不加卷標信息,表示查看指定設備的卷標
如果添加了卷標信息,表示修改指定設備的卷標
如果想要修改ext系列的文件系統的屬性,可以使用tune2fs命令
tune2fs - adjust tunable filesystem parameters on ext2/ext3/ext4 filesystems
調整那些在ext2.3.4文件系統上的可修改的參數:
常用的選項:
-j 將ext2文件系統修改為ext3
-m reserved-blocks-percentage 修改為超級用戶root保留的磁盤空間的百分比
-o [^]mount-options[,...] 修改文件系統的默認掛載選項
-r reserved-blocks-count 修改為超級用戶預留的磁盤空間塊的數量
-L volume-name 修改文件系統的卷標
-O [^]feature[,...] 修改文件系統的特性,將其關閉或者啟用
-l 顯示超級塊的信息,相當於dumpe2fs -h
文件系統的檢測修復工具:
fsck
-t fstype 指定要檢測的文件系統類型
-a 無需交互自動修復所有問題
-r 交互式修復問題,
ext系列文件系統專門的文件檢測修復工具:
e2fsck
-y 在交互過程中的說有問題,都以yes來回答
-f 強制檢測修復,即使文件系統處於clean狀態,
blkid
查找和顯示屬性的工具
blkid -L label 根據卷標進行查找
blkid -U uuid 根據UUID進行查找
findfs
find a filesystem by label or UUID 查找一個文件通過卷標或者UUID
findfs LABEL=label
findfs UUID=uuid
創建swap文件系統:
前提:分區類型必須是swap類型
修改的方法:在fdisk交互模式中,使用t命令將指定分區的類型修改為82即可
mkswap
set up a Linux swap area
-L, --label 設置交互分區的卷標
-f 強制執行
使用文件系統:掛載
根文件系統之外的其他文件系統想要被訪問,都必須通過某種方式關聯到根文件系統上,具體做法就是把其他文件系統裝載到根文件系統中的某個目錄之中,這個過程稱為“掛載”用於關聯其他文件系統的那個目錄,稱為掛載點。
掛載點:mount point 也就是其他文件系統的訪問入口 例如: /boot
要求:
1.作為掛載點的目錄必須事先存在
2.作為掛載點的目錄應該是沒有被使用或者不能被其他進程使用的目錄
3.作為掛載點的目錄一旦掛載文件系統,其內原有的文件將被隱藏
完成掛載操作使用mount命令:
mount - mount a filesystem
mount [-fnrsvw] [-t vfstype] [-o options] device dir
常用選項:
-r, --read-only 以只讀的方式掛載目錄文件系統,
-w, --read-write 以讀寫的方式掛載目標文件系統
-n,默認情況下,設備掛載或者卸載的情況下會同步更新到/etc/mtab中,如果在掛載時使用了-n選項,則表示我們要禁用此特性,即不掛載成功,也不會更新到/etc/ntab中
-t -vfstype 指明要掛載的設備上創建的文件系統類型,如果省略該選項,mount命令會通過blkid來判斷要掛載的目標設備的文件系統類型
-L -LABEL 掛載文件系統時,使用卷標代替設備名稱
-U UUID 掛載文件系統時,使用UUID代替設備名稱
-a mount -a 按照/etc/fstab文件中填寫的設備進行自動掛載
-o option:
sync/nosync:同步/異步 操作
atime/noatime:文件或者目錄被讀取訪問時是否更新訪問時間戳
diratime/nodiraname:目錄被讀取訪問時是否更新訪問時間戳
ro/rw:是否只讀/讀寫的方式掛載文件系統
dev/nodev:在此文件系統中是否允許創建設備文件
exec/noexec:在此文件系統中是否允許運行程序文件
auto/noauto:是否允許使用mount -a方式的掛載/etc/fstab中的文件系統
user/nouser:是否允許普通用戶掛載此文件系統
suid/nosuid:是否允許程序文件上的SUID和SGID特殊權限生效
relatime/norelatime:是否參考inode訪問的時間來修改其修改時間和改變時間
remount:不經卸載實現直接掛載,可以應用到新的掛載選項
acl:可以使文件系統支持facl功能
defaults:默認選項,包括rw,suid,dev,exec,auto,nouser,async,relatime
loop: 使用環回設備:將鏡像文件掛載到掛載點
-B --bind 將某個綁定到另一個目錄
卸載文件系統:
umount mount_point|device
掛載光盤:
1.保證光盤鏡像文件放入虛擬機光驅
2.保證光驅處於“已連接”狀態
3.創建光驅掛載點 mount -r /dev/sr0 mount_point
掛載優盤:
需要事先讓系統識別優盤設備,然後根據設備進行掛載,/etc/sdc1
掛載交互分區:
swapon swapoff 掛載和卸載
-a: 自動掛載存儲於/etc/fstab文件中的交互分區設備
df
-h
-t
-p
free
-k
-n
-g
/etc/fstab文件的格式:
共六個字段,使用空白字符分隔,
1.要掛載的設備
設備文件名
LABEL
UUID
偽文件系統
2.掛載點
swap設備無需掛載點,指定swap即可
3.文件系統類型
4.掛載選項:defaults
5.轉儲頻率
使用dump命令備份分區的頻率
0 表示不備份
1 每天備份一次
2 每隔一天備份一次
6.自動次序
0 不自檢
1 優先自檢 通常只設置在根文件系統上
2 次級自檢
...
9 最低優先級自檢
本文出自 “12657170” 博客,請務必保留此出處http://12667170.blog.51cto.com/12657170/1922741
磁盤分區及創建文件系統