1、文件系統概念
node
1.文件系統是操做系統用於明確存儲設備或分區上的文件的方法和數據結構;即在存儲設備上組織文件的方法。操做系統中負責管理和存儲文件信息的軟件結構稱爲文件管理系統,簡稱文件系統。centos
2.從系統角度來看,文件系統是對文件存儲設備的空間進行組織和分配,負責文件存儲並對存入的文件進行保護和檢索的系統。具體地說,它負責爲用戶創建文件,存入、讀出、修改、轉儲文件,控制文件的存取,安全控制,日誌,壓縮, 加密等。緩存
2、文件系統類型安全
1.經常使用的Linux文件系統:ext2, ext3, ext4, xfs(SGI), btrfs( Oracle), reiserfs, jfs(AIX),swap(交換文件系統),iso9660(光盤);bash
2.Windows:fat32, ntfs;網絡
3.Unix: FFS(fast), UFS(unix), JFS2;數據結構
4.網絡文件系統:NFS, CIFS;oracle
5.集羣文件系統:GFS2, OCFS2(oracle);dom
6.分佈式文件系統:ceph, moosefs, mogilefs, glusterfs, Lustre;異步
7.RAW:未經處理或者未經格式化產生的文件系統;
3、文件系統分類
1.根據其是否支持"journal"功能:
日誌型文件系統: ext3, ext4, xfs, ...
非日誌型文件系統: ext2, vfat ;
2.文件系統的組成部分:
內核中的模塊:ext4, xfs, vfat;
用戶空間的管理工具:mkfs.ext4, mkfs.xfs,mkfs.vfat
3.Linux的虛擬文件系統:VFS
4.查前支持的文件系統:cat /proc/filesystems
4、建立文件系統
mkfs命令:
(1)mkfs.FS_TYPE /dev/DEVICE
FS_TYPE:ext四、xfs、btrfs、vfat...
(2)mkfs -t FS_TYPE /dev/DEVICE
-L'LABEL': 設定卷標
eg1:mkfs.ext4 /dev/sdb1;
eg2:blkid /dev/sdb1;
eg3:mkfs.ext4 -b 1024 /dev/sdb1;
eg4:mkfs.ext4 -L /mnt/sdb2 /dev/sdb2(卷標名最好是和掛載的目錄名相同);
eg5:mkfs.ext4 -L /mnt/sdb3 -b 2048 /dev/sdb3
5、建立ext文件系統
mke2fs:ext系列文件系統專用管理工具
OPTION:
-t:{ext2|ext3|ext4}
-b:{1024|2048|4096}
-L:'LABEL'
-j: 至關於 -t ext3
注:mkfs.ext3 = mkfs -t ext3 = mke2fs -j =mke2fs -t ext3
-i #: 爲數據空間中每多少個字節建立一個inode;此大 小不該該小於block的大小
-N #:爲數據空間建立個多少個inode
I:一個inode記錄大小128---4096
-m #: 默認5%,爲管理人員預留空間佔總空間的百分比
-O FEATURE[,...]:啓用指定特性
-O ^FEATURE:關閉指定特性
6、blkid命令
blkid:查看指定塊設備的屬性信息
語法:blkid [OPTION] ...[DEVICE]
OPTION:
-U:UUID: 根據指定的UUID來查找對應的設備
-L:LABEL:根據指定的LABEL來查找對應的設備
七:e2label命令
e2lable:管理ext系列文件系統的卷標
語法:e2label DEVICE [LABEL]
eg:e2label /dev/sdb1 /mnt/sdb1
8、findfs命令
findfs:查找分區
findfs [options] LABEL=<label>
findfs [options] UUID=<uuid>
9、tune2fs命令
1.tune2fs:從新設定ext系列文件系統可調整的參數值
OPTION:
-l:查看指定文件系統超級塊信息;superblock
-L:'LABEL':修改卷標
-m #:修預留給管理員的空間百分比
-j: 將ext2升級爲ext3
-O: 文件系統屬性啓用或禁用, 屬性前加^,表示關閉此屬性,–O^has_journal
-o: 調整文件系統的默認掛載選項,–o^acl
-U:UUID: 修改UUID號;
2.生成UUID的命令:uuidgen
10、dumpe2fs命令
dumpe2fs:查看塊組信息
dumpe2fs -h = tune2fs -l:查看文件系統超級塊信息
11、文件系統檢測和修復
1.因進程意外停止或系統崩潰等狀況致使寫入操做非正常停止時,可能會致使文件破壞;此時,應該修復文件系統,注意:離線修復;
2.掛載的文件系統標記爲「dirty」或「no clean」
3.修復工具:fsck、e2fsck
4.fsck命令
格式:
①fsck.FS_TYPE
②fsck -t FS_TYPE
OPTION:
-a:自動修復錯誤;
-r:交互式修復錯誤;
注意:FS_TYPE必定要與分區上文件類型相同;
5.e2fsck命令
e2fsck:ext系列文件專用的檢測修復工具
OPTION:
-y:對問題自動回答爲yes;
-f:強行修復;
12、文件系統掛載
1.掛載:磁盤分區要想被使用必須先掛載,所謂掛載是指將額外的分區與根文件系統上的某目錄創建關聯關係的過程(默認只有管理員纔有權限),進而使得此目錄做爲其它文件訪問入口的行爲。若是目錄中有文件,則目錄中原有文件會被隱藏。使用mount命令掛載;
2.卸載:解除此關聯關係的過程。使用umount命令卸載;
3.卸載時:可以使用設備,也可使用掛載點;
4.掛載點:目錄通常爲空;
5.mount命令
(1)掛載方法:mount DEVICE MOUNT_POINT(掛載點)
DEVICE:所要掛載的磁盤分區:
①設備文件:例如/dev/sda5
②卷標:-L 'LABEL', 例如 -L 'MYDATA'
③UUID, -U 'UUID':例如 -U '0c50523c-43f145e7-85c0-a126711d406e'
④僞文件系統名稱:proc,sysfs, devtmpfs, configfs
MOUNT_POINT(掛載點):另外一個文件系統訪問入口:
①事先存在;建議使用空目錄
②進程正在使用中的設備沒法被卸載
(2)查看當前以掛載全部設備信息:
①mount;
②cat /etc/mtab
③cat /proc/mounts(查看內核追蹤到的已掛載的全部設備信息)
(3)mount命令經常使用掛載選項
OPTION:
-t vsftype:指定要掛載的設備上的文件系統類型
-r: readonly,只讀掛載;
-w: read and write, 讀寫掛載;
-n: 不更新/etc/mtab,至關於#mount;
-a:自動掛載全部支持自動掛載的設備(定義在了/etc/fstab 文件中,且掛載選項中有auto功能)
-L 'LABEL': 以卷標指定掛載設備;
-U 'UUID': 以UUID指定要掛載的設備;
-B, --bind: 綁定目錄到另外一個目錄上;
-o options:(掛載文件系統的選項),多個選項使用逗號分隔
async:異步模式,數據寫操做先於內存完成,然後再根據某種策略同步至持久設備中;
sync:同步模式,內存更改時,同時寫磁盤;
atime/noatime:文件和目錄被訪問時是更新最近一次的訪問時間戳;
diratime/nodiratime:目錄被訪問時是更新最近一次的訪問時間戳;
auto/noauto:是否支持自動掛載,是否支持-a選項;
exec/noexec:是否容許執行此設備上的二進制程序文件;
dev/nodev:是否支持在此設備上使用設備文件;
suid/nosuid:是否支持在此設備上的文件使用suid;
remount:從新掛載,一般用於不卸載的狀況下從新指定掛載選項;
ro:只讀;
rw:讀寫;
user/nouser:是否容許普通用戶掛載此設備,默認管理員才能掛載;
acl:啓用此文件系統上的acl功能,默認不支持;
注意:默認掛載選項至關於rw,suid, dev, exec, auto, nouser, async
十3、文件系統卸載
卸載:掛載點沒有被進程訪問時方能夠卸載;
在卸載前最好是要查看下哪些進程正在訪問掛載的設備,可以使用:fuser -v 掛載點;
若是有程序正在使用該設備,而且想停止正在此掛載點的進程,則使用:fuser -km 掛載點;
卸載命令:
umount DEVICE;
umount MOUNT_POINT;
十4、設備自動掛載
自動掛載的設備文的配置文件:/etc/fstab
1./etc/fstab:每行定義一個要掛載的文件系統,有如下6個字段:
① 要掛載的設備或僞文件系統
② 掛載點
③ 文件系統類型
④ 掛載選項
⑤ 轉儲頻率(備份頻率)
⑥ 自檢次序
2.要掛載的設備或僞文件系統:
①設備文件
②LABEL(LABEL=」」)
③UUID(UUID=」」)
④僞文件系統名稱(proc,sysfs)
3.掛載選項:defaults
4.轉儲頻率(備份頻率)
0:不作備份
1:天天轉儲
2:每隔一天轉儲
5.自檢次序
0:不自檢,額外建立的文件系統都無須自動自檢;
1:首先自檢;通常只有rootfs才用1
2:不一樣的設備可使用同一個自檢次序
6.對於/etc/fstab配置文件寫錯的解決辦法:
①/etc/fstab文件裏寫載設備等其它選項時必定要正確填寫,不然系統重啓後啓動不起來,會一直停一個界面,以下圖所示:
②解決辦法;界面會有提示讓你輸入管理員root密碼,正確輸入密碼以後會進入一個終端界面,輸入如下命令從新掛載根,mount-o remount,rw /,輸入完這條命令後就能夠修改./etc/fstab裏寫錯的選項,而後保存重啓便可。
十5、利用文件,實現文件系統
步驟:
①dd if=/dev/zero of=/testdir/partfile bs=1M count=500 ##建立500M文件 ②ll-h /testdir/partfile ③mkfs.ext4 /testdir/partfile ##格式化 ④blkid/testdir/partfile ##查看文件系統信息 ⑤mkdir /mnt/partfile ⑥mount -o loop /testdir/partfile /mnt/partfile ##掛載,臨時生效 ⑦把它寫進/etc/fstab文件裏實現自動掛載,掛載選項不能寫defaults,而要寫loop;默認掛 載到/dev/lop0設備; /testdir/partfile /mnt/partfile ext4 loop 0 0 ##自動掛載,永久生效
十6、手工指定掛載的loop設備
步驟:
①losetup /dev/loop2 /testdir/partfile ##指定掛載設備關聯至掛載點 ②mkdir /mnt/partfile2 ##建立掛載點 ③mount /dev/loop2 /mnt/partfile2 ##掛載 ④losetup -a ##查看掛載生效的loop設備
十7、目錄掛載目錄
步驟:
①mkdir /mnt/boot ②mount -B /boot /mnt/boot ③把它寫進/etc/fstab配置文件實現自動掛載,注意這裏的文件類型和掛載選項要寫成none和bind,以下所示: /boot /mnt/boot none bind 0 0 ④mount -a從新加載/etc/fstab文件中的全部掛載選項
十8、掛載交換分區
1.交換分區是系統RAM的補充;
2.啓用:swapon
語法:swapon [OPTION]… [DEVICE]
OPTION:
-a:激活全部的交換分區;
-p PRIORITY:指定優先級(用數字表示)
在/etc/fstab裏指定,Pri=value
-s:查看全部生效的交換分區(等同於cat /proc/swap)
3.禁用swapoff
語法:swapoff [OPTION]… [DEVICE]
4.示例:
(1)分區: fdisk /dev/sdb;大小爲2個G的分區,並該分區的ID,ID改成82 (2)格式化: mkswap -L swap_sdb1 /dev/sdb blkid (3)掛載;寫進/etc/fstab配置文件實現自動掛載 /dev/sdb1 swap swap defaults 0 0 Swapon -a Swapon -s (4)調整優先級,能夠能夠用命令臨時指定,要想永久生效要寫進/etc/fstab配置文件裏, 例如: /dev/sdb1 swap swap pri=100 0 0 注:優先級要想生效先關閉設備,而後再開啓設備 swapoff /dev/sdb1 Swapon -a
十9、swap的優先級
①用戶能夠給某個swap指定一個0到32767的優先級;
②若是用戶沒有指定,那麼核心會自動給swap指定一個優先級,這個優先級從-1開始,每加入一個新的沒有用戶指定優先級的swap,會給這個優先級減一;
③先添加的swap的缺省優先級比較高,除非用戶本身指定一個優先級,而用戶指定的優先級(是正數)永遠高於核心缺省指定的優先級(是負數);
④優化性能:分佈存放,高性能磁盤存放;
二10、文件啓用swap
步驟:
①dd if=/dev/zero of=/testdir/swapfile bs=1M count=1024 ##建立1G大小的文件 ②mkswap /testdir/swapfile ##格式化 ③blkid /testdir/swapfile ##查看塊設備信息 ④寫進/etc/fstab配置文件實現自動掛載 /testdir/swapfile swap swap defaults 0 0 ⑤swapon -a ##激活swap分區 ⑥swapon -s ##查看生效swap分區
二11、刪除swap
Swapoff/dev/sdb1
刪除/etc/fstab相應記錄
刪除分區和文件
二12、移動設備使用
1.USB使用:
mkdir /mnt/usb mount /dev/sdf4 /mnt/usb Sync(執行三次以上) 注:USB設備名是隨機生成的,可以使用df命令查看;
2.光盤使用:
eject:彈出光驅 eject -t:彈入光驅
3.光盤製做成ISO文件
cp /dev/sr0 /testdir/centos.iso mkdir /mnt/iso mount /testdir/centos.iso /mnt/iso
4.將目錄打包成ISO文件
mkisofs -r -o etc.iso /etc mkdir /mnt/etc mount etc.iso /mnt/etc
二十3、free命令
free:內存及交換分區空間使用狀態;
語法:free [OPTION]
OPTION:
-m:以MB爲單位;
-g:以GB爲單位;
-h:以可讀性較高的方式來顯示信息;
其中個選項的含義:
①Mem:物理內存的使用狀況;
②Swap:交換分區使用的狀況;
③-/+ buffers/cache:表示物理內存在不考慮緩衝和緩存佔據空間的使用狀況;
④buffer:緩衝,用來緩存寫;
⑤cache:緩存,用來緩存讀;
二十4、df命令
df:文件系統空間佔用等信息的查看工具
語法:df [OPTION]... [FILE]...
OPTION:
-H:與-h參數相同,但在計算時,1k=1000,而不是1k=1024;
-T 文件系統類型;
-h: human-readable(以可讀性較高的方式來顯示信息);
-i:顯示inode使用信息而非默認的磁盤空間使用信息;
-P: 以Posix兼容的格式輸出;
二十5、du命令
du:查看某目錄空間佔用狀況
語法:du [OPTION]... DIRECTORY
OPTION:
-h:human-readable(以可讀性較高的方式來顯示信息);
-s:整個目錄大小;
二十6、dd命令
dd::convert and copy a file, 用指定大小的塊拷貝一個文件,並在拷貝的同時進行指定的轉換
用法:dd if=/PATH/FROM/SRC of=/PATH/TO/DEST
OPTION:
bs=#:block size, 複製單元大小; count=#:複製多少個bs; if=file:從所命名文件讀取而不是從標準輸入; of=file:寫到所命名的文件而不是到標準輸出; bs=size:指定塊大小(既是是ibs也是obs); ibs=size:一次讀size個byte; obs=size:一次寫size個byte; cbs=size:一次轉化size個byte; skip=blocks:從開頭忽略blocks個ibs大小的塊; seek=blocks:從開頭忽略blocks個obs大小的塊; count=n:只拷貝n個記錄;
conv=conversion[,conversion...]用指定的參數轉換文件。 轉換參數: ascii:轉換 EBCDIC 爲 ASCII; ebcdic:轉換 ASCII 爲 EBCDIC; block:轉換爲長度爲cbs的記錄,不足部分用空格填充; unblock:替代cbs長度的每一行尾的空格爲新行; lcase:把大寫字符轉換爲小寫字符; ucase:把小寫字符轉換爲大寫字符; swab:交換輸入的每對字節; noerror:出錯時不中止; notrunc:不截短輸出文件; sync:把每一個輸入塊填充到ibs個字節,不足部分用空(NUL)字符補齊;
示例:
dd if=/dev/sda of=/dev/sdb ##磁盤拷貝 dd if=/dev/sda of=/tmp/mbr.bak bs=512 count=1 ##備份MBR dd if=/dev/zero of=/dev/sdabs=64 count=1 seek=446 ##破壞MBR中的bootloader 有二進制文件 fileA, size>2K。如今想從第64個字節位置 開始讀取,須要讀取的大小是 128Byts。又有fileB, 想把上 面讀取到的128Bytes寫到第32個字節開始的位置,替換 128Bytes ,請問如何實現? dd if=fileA of=fileB bs=1 count=128 skip=63 seek=31 conv=notrunc
備份: dd if=/dev/sdx of=/dev/sdy ##將本地的/dev/sdx整盤備份到 /dev/sdy dd if=/dev/sdx of=/path/to/p_w_picpath ##將/dev/sdx全盤數據備份到指定路徑的p_w_picpath文件 dd if=/dev/sdx | gzip >/path/to/p_w_picpath.gz ##備份/dev/sdx全盤數據,並利用gzip工具進行壓縮,保存到指定路徑 恢復: dd if=/path/to/p_w_picpath of=/dev/sdx ##將備份文件恢復到指定盤 gzip -dc /path/to/p_w_picpath.gz | dd of=/dev/sdx ##將壓縮的備份文件恢復到指定盤
拷貝內存資料到硬盤: dd if=/dev/mem of=/root/mem.bin bs=1024 ##將內存裏的數據拷貝到root目錄下的mem.bin文件 從光盤拷貝iso鏡像: dd if=/dev/cdrom of=/root/cd.iso ##拷貝光盤數據到root文件夾下,並保存爲cd.iso文件 銷燬磁盤數據: dd if=/dev/urandom of=/dev/sda1 ##利用隨機的數據填充硬盤,在某些必要的場合能夠用來銷燬數據。執行此操做之後, /dev/sda1將沒法掛載,建立和拷貝操做沒法執行。其中,/dev/urandom能夠寫爲/dev/zero;
獲得最恰當的block size: dd if=/dev/zero bs=1024 count=1000000of=/root/1Gb.file dd if=/dev/zero bs=2048 count=500000of=/root/1Gb.file dd if=/dev/zero bs=4096 count=250000of=/root/1Gb.file dd if=/dev/zero bs=8192 count=125000of=/root/1Gb.file 經過比較dd指令輸出中所顯示的命令執行時間,便可肯定系統最佳的block size大小;
測試硬盤讀寫速度: dd if=/root/1Gb.file bs=64k | dd of=/dev/null dd if=/dev/zero of=/root/1Gb.file bs=1024 count=1000000 經過上兩個命令輸出的執行時間,能夠計算出測試硬盤的讀/寫速度; 修復硬盤: dd if=/dev/sda of=/dev/sda 當硬盤較長時間(好比1,2年)放置不使用後,磁盤上會產生消磁點。當磁頭讀到這些區域時會遇 到困難,並可 能致使I/O錯誤。當這種狀況影響到硬盤的第一個扇區時 ,可能致使硬盤報廢。上邊 的命令有可能使這些數據起死回生。且這個過程是安全,高效的。