linux磁盤管理和文件系統建立

1      磁盤管理

1.1    硬盤的構造原理

硬盤分類:node

                        機械式硬盤,固態硬盤linux

硬盤出廠會進行低級格式化,分磁盤,再分扇區,硬盤的第一個磁道的一個扇區就是MBR 512Bytes shell

Master boot record數據庫

                                    446 bytes bootloader 主引導程序編程

                                    64bytes :主分區存儲 16bytes表示一個主分區,最多4個主分區windows

                                    2bytesmagic number 表示mbr是否有效安全

 

硬盤的注意事項:bash

a)                1.硬盤須要絕對的無塵環境,生活環境拆開,硬盤基本上就是掛掉的網絡

b)                2.硬盤的外圈讀寫速度較快,C盤通常在外圈,所以通常把系統安裝在Capp

c)                3.機械硬盤是盤面不端旋轉,磁頭固定讀取數據

 

硬盤組成:

a)                圓形的盤片(存儲數據)

b)                機械手臂(旋轉讀取數據)

c)                主軸馬達,轉動盤片,讓這個機械手臂來讀取數據

硬盤構造原理:

a.    硬盤由多個盤片組成 ,每一個盤面都有一個磁頭,因此磁頭數決定盤面數。通常讀寫數據都是幾個磁頭同時進行,這樣速度會比較快

b.    盤片劃分紅多個磁道,外圈中圈….內圈.. 每一個盤面從外圈向內圈編號,具備相同編號的磁道就造成一個圓柱,稱之爲柱面

c.    磁盤上的每一個磁道被等分爲多個弧段,這些弧段就稱爲磁盤的扇區,扇區是存儲的最小單位512bytes

d.    多個扇區組成磁道,多個磁道組成柱面,柱面是分區的最小單位。

e.g:   Disk /dev/sda: 42.9 GB, 42949672960 bytes

                        255 heads, 63 sectors/track, 5221 cylinders

                        Units = cylinders of 16065 * 512 = 8225280 bytes

                        硬盤的容量=柱面數*磁頭數*扇區數*512B

每一個柱面經過255個磁頭來控制,每一個磁頭控制63個扇區,因此一個柱面的大小爲

            255*63*512=8225280 bytes

這裏就有個問題,扇區確定是外圍磁道的大,就是相對面積大,可是爲何磁盤作成同樣的大小的呢?

a)                磁頭單位時間內讀取的字節數是必定的;

b)                無論是在這個外圈 中圈 內圈 單位時間掃過的扇區數量是同樣的(角速度同樣)單位時間略過的面積是不同(線速度不一樣);

c)                基於前面的兩點,扇區的容量不是按照這個面積做爲衡量標準,而是單位時間可以讀取的字節數來決定的,因此每一個扇區的存儲容量作成同樣是最合理的

硬盤的代號和分區關係:

                                    SCSI USB SATA FLASH接口的磁盤

                                    /dev/sd[a-p][1-15]  a-p是硬盤數量, 1-15是分區的數量

 

                                    IDE接口的磁盤

                                    /dev/hd[1-p][1-63]

邏輯分區:

                          1)主分區和擴展分區最多隻能有四個(硬盤的限制)

                  2)擴展分區最多隻能一個(操做系統限制)

                  3)邏輯分區是經過擴展分區分出來的

                  4)擴展分區是沒法使用的,是不能被格式化分區,可以使用的是邏輯分區

                  5)邏輯分區數量是和這個操做系統有關係的,linux中的IDE最多有59個邏輯分區,1-3是主分區 4是擴展分區

                          6)這個SATA USB SCSI硬盤最多有11個邏輯分區。

 

2      文件系統

Linux文件系統支持的類型:

基本文件系統:Ext2, Ext3, Ext4, Reiserfs(支持小文件), xfs(支持大文件), btrfs, JFS, vfat(支持WindowsFAT32, NTFS

交換分區:swap

集羣文件系統:GFS2(全局文件系統), OCFS2

網絡文件系統:NFS, smbfs(CIFS) Common Internet File System

光盤:iso9660

分佈式文件系統:ceph

moosefs, mogilefs, hdfs, gfs, glusterfs

 

(1)日誌型文件系統:

非日誌型文件系統:ext2

日誌型文件系統:ext3

 

(2)swap 交換分區

VFSvirtual File System)的做用就是採用標準的Unix系統調用讀寫位於不一樣物理介質上的不一樣文件系統,即爲各種文件系統提供了一個統一的操做界面和應用編程接口。VFS是一個可讓open()read()write()等系統調用不用關心底層的存儲介質和文件系統類型就能夠工做的粘合層。

文件系統是經過一層VFSvirtual file system)層來屏蔽全部的文件系統的差別,提供統一的調度接口給用戶使用,讓用戶操做每一個文件系統都是一致的。

vfs詳解:

   cpu 4個級別

               ring 0 內核運行級別  內核空間(內核模式)

               ring 1 2 歷史緣由,沒有使用

               ring 3  進程運行的級別 (用戶模式 用戶空間

   文件系統是操做硬盤硬件,所以要在內核空間下進行system call,功能調用接口

   vfs彌合了全部文件系統的不一樣之處,提供一個統一的調用接口給程序的開發者

#查看系統支持的文件系統

clip_image001

#說明這些是內核有裝載的內核模塊,之後要新增文件系統類型,須要本身去裝載模塊

2.1    linux Ext2Ext3文件系統的特性分析(很是重要)

文件系統:分區--格式化成相應操做系統支持的文件系統格式。

                分區就是文件系統,文件系統是一個分區?這句話在傳統時代是沒問題的。

                不過如今有了這個lvm raid技術,一個分區能夠再邏輯的分爲多個分區。因此如今通常認爲是一個能夠掛載的數據文件爲一個文件系統,記得dd一個磁盤鏡像麼,它也能夠單獨格式化成相應的文件系統,而後掛載。

 

  如今就開始介紹這個linuxext2文件系統是如何來運行的,怎麼記錄文件的權限等元數據和存儲真實數據的。

主要有下面的集中存儲數據的塊:

1.    data block :實際存儲數據的塊

2.    inode 存儲數據的元數據(權限,時間戳,文件大小,block存儲位置等)

3.    super block:主要記錄block inode的總量和已使用量,和文件系統的格式等一堆相關信息,dump2fs能夠查詢

4.    inode bitmap:利用bit來記錄這個inode是否已經使用了。

5.    block bitmap:利用這個bit來記錄這個block是否已經使用了

 

linux 文件系統和windowsfat ntfs系統對比

a.    linux文件系統是利用這個索引文件查找方式,因此一個inode記錄的數據庫均可以快速查找到。至關一下指向全部block的存儲位置,這樣就能夠立刻進去數據的讀取。

b.    FAT格式的系統是利用鏈表的形式來讀取這個數據,因此要第一個讀取了才能知道下一個數據在哪裏,效率比較低。

 

c.    這就涉及到這個磁盤碎片整理了,假如FAT格式的文件系統讀寫太頻繁,這個數據比較亂,可能盤片須要旋轉不少圈才能讀取到,很正常。可是linuxext2系統就不須要這樣,索引方式一次遍歷就能所有找到可能有時會有點分散,仍是須要必定尋道時間。

綜上可知:

A.    windows下的NTFSFAT通常使用一段時間後須要進行這個磁盤碎片整理;若是這個文件系統分區存儲的數據比較少,建議備份,而後從新格式化,這樣能夠減小這個讀寫次數,保護磁盤;

B.    linux系統不須要磁盤碎片整理;

 

 

inode詳解:

                        一個文件佔用一個inode

                        inode記錄了文件數據存儲的data block塊位置,各種權限,時間戳,文件大小等元數據

                        inode的大小爲128bytes

 

因爲一個磁盤過大,通常會把一個分區分紅多個block group,每一個組都有一套inode data block

inode bitmap block bitmap

clip_image002

superblock: blockinode的總量

                                    blockinode的使用量,爲使用量天然就能夠算出來剩餘量

                                    block塊大小

                                    block gourp 組個數

                                    superblock只有部分block group中有,通常是1 3 5 7 9包含,備份

GDT   第一個block bitmap所在的block

                          第一個inode bitmap所在的block

                          第一個inode tables所在的block

                          group中空閒的block總數

                          group中空閒的inode總數

                          目錄數

block的大小爲 1024bytes 2048bytes 4096bytes

block大小                                           1024                2048                4096

最大的單一文件限制              16GB               256GB             2TB

最大的文件系統容量              2TB                             8TB                             16TB

 

因爲一個文件佔用一個inode,所以建立的文件數量要小於等於inode的數量

因爲inode裏面有存放這個data block 的位置,存放單個block num4bytes,可是inode的大小是固定的128bytes,所以inode作成了多重索引的形式,12個直接索引,1個間接索引,1個雙間接索引和1個三間接索引.

clip_image004

假如block=1K,則單個文件最大支持多少?

直接:12*1K(一個直接索引放一個block

                                    單間接=256*1K=256K

            雙間接=256*256*1K=64M

                                    三間接=256*256*256*1K=16G

一個block能夠存儲block num 1024/4=256

2K 4K因爲文件系統的限制,沒法這樣計算。

經過stat來查看這個文件的屬性信息,存儲在inode裏面。

clip_image006

爲何block的大小爲 1K 2K 4K 2n次方的?

答:數據塊是要存在內存中,而內存是按頁框來計算的,頁框通常就是4K

爲何設備文件沒有大小?

答:設備文件只是一個入口,只佔用inode,沒有存儲數據。

clip_image008

block塊大小是事先設定好的,inode的預留數量要多少比較合適,比例多少?

答:其實根據系要存的文件的大小的總體狀況來定義,儘可能多點inode,以防止不夠使用

 

2.2    建立文件系統

建立文件系統須要兩個條件

            1.內核支持這種文件系統

            2.用戶空間有這個文件系統的管理工具

2.2.1  文件系統的基本操做和查看工具

df  du   ls  ln

 

ls

ls命令

功能:查看文件的inode

語法:

                        ls [option]

經常使用的選項

                        -i  :顯示inode

                        -d :顯示目錄

                        -l  :顯示詳細信息

 

例子:

clip_image010

df

df命令

功能:列出文件系統的總體使用量

語法:

            df  [option]  [目錄|文件名|文件系統]

經常使用的選項:

                        -h human-readable 人類易看

                -k KB顯示,默認

                -m MB顯示

                -i inode數量顯示

                -a 列出文件系統  後面無參數

                -T system type ext2 ext3

 

例子:

#查看分區sdb2

[root@localhost ~]# df /dev/sdb2

Filesystem           1K-blocks      Used Available Use% Mounted on

/dev/sdb2              4031680     74104   3752776   2% /home

#查看已經掛載的分區(真實文件系統)的使用狀況

clip_image011

#查看全部的文件系統的狀況

clip_image013

#顯示/etc目錄的狀況

clip_image014

#顯示當前系統掛載的分區的文件系統格式

clip_image016

mount命令也能夠查看

 

du

du命令

功能:估計文件的佔用空間量(偏差)

語法:

            du [OPTION]... [FILE]...

經常使用的選項:

                        -a :列出當前目錄的全部數據,包括目錄和文件

                -s :計算總量

                -m MB顯示

                        -k  KB顯示

                -h  :人類易看的方式

                        -S 不包括當前目錄的子目錄的大小(文件則只顯示文件)

                                                會顯示每一個目錄的大小

                       

           

 

例子:

1.    .顯示/etc/目錄下的大小

clip_image017

2.    顯示根目錄下每一個目錄的大小,procsys0,可能會部分報錯

clip_image018

3.    列出當前目錄的全部數據,包括目錄和文件,最底部計算總量

clip_image019

4.    顯示tmp目錄下各個目錄的大小 /tmp不包括子目錄

clip_image020

ln

ln命令

功能:連接文件

語法:

            ln [OPTION]...  TARGET LINK_NAME

            默認是硬連接

經常使用的選項:

                -s :建立符號連接,建議使用絕對路徑

                -v :打印連接結果

                        -f  :目標文件存在則刪除後建立

硬連接文件:每一個文件都有一個inode,而一個inode能夠被多個文件所指

                             而以前說到的讀取文件是要從這個目錄來讀取,而目錄也是一個文件

                             目錄也是佔用一個inode,而inode指向的block存放着目錄文件下

                             的文件名和對應的inode號。

                             因此硬連接就是在文件的所在的目錄的block裏面的對應項寫着不一樣

                             文件名,可是是同一個inode。就是這麼簡單。

硬鏈接的好處:

1.    將一個硬鏈接產生的文件名刪除後,該文件對應的inodeblock都仍是存在      

(真正刪除須要最後一個鏈接到該inode的文件刪除,這時候對應的inodeblock纔會回收)

2.    對任何一個文件名進行修改,其實都是修改了相同的inodeblock文件,結果同樣

3.    設置了硬鏈接後磁盤空間通常不會改變,除非存放硬鏈接文件的目錄的block超過block大小

缺點:

1不能跨文件系統,每一個文件系統都一套inodeblock bitmap,沒法指向同個inode

                        2不能鏈接到目錄,連接目錄後,目錄下的文件和子目錄也要作硬鏈接,linux暫時不支持,太過複雜

 

符號連接 symbolic link

1.    符號鏈接實際上是該文件在本身所在目錄下面有一個單獨的inode和文件名

2.    inode存儲的block裏面存放着這個符號鏈接原文件的文件名,所以,符號文件的大小是這個連接的原文件名長度

3.    只要指定目錄有文件名一致,則符號連接有效,即便該文件(更換後)的inode不一樣也不要緊

4.    能夠建立目錄連接,至關進入指定的目錄下

5.    target建議使用絕對路徑

clip_image021

符號鏈接的好處:

                        1:能夠鏈接不一樣的文件系統和這個目錄,應用普遍(連接只是包含文件的路徑名)

                        2:刪除數據本來數據後比較安全,不怕有備份

            壞處:

                        1佔用這個獨立的inodeblock

                        2刪除原文件後,符號鏈接文件成爲無效鏈接,打不開,佔用磁盤存儲空間

clip_image022

 

例子:

1.建立硬連接和軟連接,顯示其區別

clip_image024

2.刪除源文件後,硬連接和軟連接的區別

clip_image026

硬連接正常,軟連接找不到目標。

3.建立目錄的軟連接

clip_image028

2.2.2  磁盤的分區,格式化,檢驗和掛載

mknod ,fdiskmkfsmke2fse2lableblkiddumpe2fstune2fsfscke2fsck

mknod

mknod命令

功能:建立設備文件

設備文件:(沒有大小)

            b: 按塊爲單位,隨機訪問的設備;

            c:按字符爲單位,線性設備;

           

            b: 硬盤

            c: 鍵盤

/dev

            主設備號 major number

                        標識設備類型

            次設備號 minor number

                        標識同一種類型中不一樣設備

 

 

語法:

                        mknod [OPTION]... NAME TYPE [MAJOR MINOR]

經常使用的選項

                        -m MODE  :文件的權限

 

設備文件只是做爲硬件的訪問入口,須要有內核可以識別一個設備的主設備號爲66 的纔可使用

 

例子:

1.建立一個設備文件

clip_image029

2.建立設備文件,手動指定權限

clip_image030

3.發送信息給xshell登陸的僞終端設備

clip_image031

           

fdisk

2.2.2.1            分區

fdisk命令

功能:磁盤分區

硬盤設備的設備文件名:

IDE, ATAhd

SATAsd

SCSI: sd

USB: sd

a,b,c,...來區別同一種類型下的不一樣設備

sda1: 第一個主分區

            sda2:

            sda3:

            sda4:

            sda5: 第一個邏輯分區(即便主分區只是用了2個)

 

 

語法:

                        fdisk  [-uc]  [-b sectorsize] [-C cyls] [-H heads] [-S

       sects] device

 

       fdisk -l [-u] [device...] 顯示全部磁盤的分區狀況或者是特定的磁盤

 

       fdisk -s partition... 顯示分區或者磁盤的大小(block的大小)

 

       fdisk –v  :顯示版本

 

       fdisk –h  :顯示幫助信息

經常使用的選項

                        fdisk device 經常使用選項:

                                    p: 顯示當前硬件的分區,包括沒保存的改動

                                    n: 建立新分區

                                    e: 擴展分區

                                    p: 主分區

                                    d: 刪除一個分區

                                    w: 保存退出

                                    q: 不保存退出

                                    t: 修改分區類型

                                                L: list code

                                    l: 顯示所支持的全部類型

                                                這個命令是比較特殊的交換命令,不用背,進入按提示操做便可

                                                記得q能夠不保存退出 w則是保存,別按錯後悔了。

                                    m|h:幫助信息

 

新建完分區後,須要讓內核識別:

            rhel5使用命令partprobe device partprobe /dev/sdc

            rhel6版本的系統在新建分區後,w保存,會自動調用內核識別

Calling ioctl() to re-read partition table.

            假如沒有可使用命令partx device  如:partx /dev/sdc

例子:

1.顯示系統上的全部分區

clip_image032

2.新建一個分區爲1G的邏輯分區,修改系統的格式給lvm

clip_image034

 

 

 

 

 

 

 

mkfs

2.2.2.2            格式化

mkfs命令

功能:磁盤分區格式化

支持ext2 ext3 ext4 vfat

 

語法:

                        mkfs [-V] [-t fstype] [fs-options] filesys [blocks]

經常使用的選項

                        -t fstype  指定要建立何種文件類型

-c  在製作檔案系統前,檢查該分區是否有壞道

-fs  指定創建文件系統時的參數

使用方法:

[root@localhost ~]# mkfs.

mkfs.cramfs   mkfs.ext3     mkfs.ext4dev  mkfs.msdos

mkfs.ext2     mkfs.ext4     mkfs.minix    mkfs.vfat

mkfs –t ext3 /dev/sdc6 == mkfs.ext3 /dev/sdc6

事實上mkfs是調用了命令mke2fs

例子:

[root@localhost ~]# mkfs.ext2 /dev/sdc6

[root@localhost ~]# mkfs.ext3 /dev/sdc6

[root@localhost ~]# mkfs.ext4 /dev/sdc6

 

mke2fs

mke2fs命令

功能:建立文件系統

專門建立ex系列的文件系統

 

[root@localhost ~]# cat /etc/mke2fs.conf  #查看建立的文件系統的默認配置

[defaults]

            base_features = sparse_super,filetype,resize_inode,dir_index,ext_attr

            blocksize = 4096 #block的大小是4K

            inode_size = 256 #inode大小是256字節,上面的128字節是比較老的數據

            inode_ratio = 16384

[fs_types]

            ext3 = {

                        features = has_journal

            }

            ext4 = {

                        features = has_journal,extent,huge_file,flex_bg,uninit_bg,dir_nlink,extra_isize

                        inode_size = 256

            }

……

語法:

                        mke2fs [-b block大小] [-i 多少容量給一個inodeblock計算)] [-L卷標] [-cj] 設備

經常使用的選項

                        -c fsck檢查磁盤錯誤,一個-c,進行快速的讀取測試

                                                兩個-c -c 進行這個讀寫測試

                        -j 默認建立ext2,加入這個命令後就建立這個journal成爲這個ext3

                        -m # :指定預留給超級用戶使用的塊數百分比

註解:卷標的做用是爲了用於引用使用,方便,類型域名了。

          -b BLOCK_SIZE: 指定塊大小,默認爲4096;可用取值爲102420484096

          -L LABEL:指定分區卷標;

          -t fs-type :文件系統類型

          -m #: 指定預留給超級用戶的塊數百分比 默認是百分之5

          -i #: 用於指定爲多少字節的空間建立一個inode,默認爲8192;這裏給出的數值應該爲塊大小的2^n倍;

          -N #: 指定inode個數;

          -F: 強制建立文件系統;被掛載也能夠強制建立文件系統

          -E: 用戶指定額外文件系統屬性;

例子:建立一個2G大小的ext4的文件系統,卷標指定爲testblock大小爲2048

1.fdisk建立一個分區

clip_image036

2.確保分區已經被內核識別

[root@localhost ~]# cat /proc/partitions

  8       39    2104483 sdc7

若是未識別,則讓內核從新讀取

clip_image037

3.建立文件系統

clip_image039

 

 

 

 

blkid

blkid命令

功能:查詢或查看磁盤設備(已有文件系統)的相關屬性

UUID

        TYPE

        LABEL

 

語法:

                        blkid [device]

 

clip_image041

 

 

 

 

e2label

e2label命令

功能:用於查看和定義卷標

 

語法:

                        設定卷標:e2label 設備文件 卷標

                        查看卷標:e2label 分區

例子:

clip_image042

 

 

dumpe2fs

dumpe2fs命令

功能:顯示文件系統的屬性信息等

 

 

block group的信息

                        通常 0 1 3 5 7 9 包含superblock的信息 1個主 5個備

 

語法:

                        dumpe2fs partition

經常使用選項

                        -h :僅查看超級塊中的信息

例子

clip_image044

 

tune2fs

tune2fs命令

功能:調整ex2ex3ex4文件系統的參數

 

語法:

                        tune2fs [option]  device

經常使用的選項

                        -j: 不損害原有數據,將ext2升級爲ext3

                        -L LABEL: 設定或修改卷標;

                        -m #: 調整預留百分比;

                        -r #: 指定預留塊數;

                        -o: 設定默認掛載選項;

                                     acl

                        -c #:指定掛載次數達到#次以後進行自檢,0-1表關閉此功能;

                        -i #: 每掛載使用多少天后進行自檢;0-1表示關閉此功能;

                        -l: 顯示超級塊中的信息;

 

例子:

#把預留塊比例改成百分之三,掛載多少次都不自檢,卷標修改成test4

clip_image045

 

2.2.2.3   檢查

e2fsck

e2fsck命令

功能:專門修復ext2/ext3/ext4

 

語法:

                        e2fsck [option]  device

經常使用的選項

                        -f:強制檢查

                        -p: 自動修復

                        -v:執行時顯示詳細的信

              -y: 對問題自動回答爲yes

e2fsck執行後的傳回值及表明意義以下:

0 沒有任何錯誤發生。

1 文件系統發生錯誤,而且已經修正。

2 文件系統發生錯誤,而且已經修正。

4 文件系統發生錯誤,但沒有修正。

8 運做時發生錯誤。

16 使用的語法發生錯誤。

128 共享的函數庫發生錯誤

 

 

注意:   一般是這個系統有問題的時候才使用root用戶來檢查文件系統的一致性

                  若是正常狀況下使用可能會形成文件系統的損害。

                  因爲fsck掃描磁盤的時候會對這個文件系統形成損壞,因此必定不要把要檢查的

                  分區掛載上去,意思就是要在卸載的狀況下檢查

             每一個分區格式化成爲這個文件系統後都會自動生成一個lost+found的目錄,

             做用其實就是來存放fsck檢查後有問題的數據的,通常裏面是沒有數據的,

             假若有數據的話,那確定是這個文件系統有問題了。

例子:

修復/dev/sdc7

clip_image047

 

fsck

fsck命令

功能:磁盤檢驗,保證文件系統的統一,調用e2fsck

 

語法:

                        fsck [-t 文件系統] [-ACay] 設備名稱|掛載點

經常使用的選項

                        -t  ext2 ext3 通常不須要 linux自動檢測blkid檢測

     -A 根據/etc/fstab的內容,將須要的設備掃描檢測一次,一般開機會執行這個命令

     -a 自動修復有問題的分區,不用手動y確認

     -y 相似a部分文件系統僅僅支持-y

     -C 檢測過程當中用直方圖顯示這個進度

     -f  強制檢查,通常沒有發現unclean標誌,不會進入細化檢查,要細化檢查須要這個參數

 

2.2.2.4   掛載與卸載

掛載點的選擇注意事項:

                        1 單一文件系統不該該重複掛載在不一樣的目錄(掛載點)

                        2 單一目錄不該該被屢次掛載,必定要一一對應

                        3 掛載點應該是空目錄才合理,若是該目錄有東西的話,那會被暫時隱藏

                          直到該文件系統卸載後才能看到。

 

mount

mount命令

功能:掛載文件系統

 

語法:

                        mount 設備 掛載點

            設備:

                        設備文件:/dev/sda5

                        卷標:LABEL=「」

                        UUID UUID=「」

            掛載點:目錄

                        要求:

                                    1、此目錄沒有被其它進程使用;

                                    2、目錄得事先存在;

                                    3、目錄中的原有的文件將會暫時隱藏;

經常使用的選項

                        -a mount all file system base /etc/fstab

                        -l 單純輸入mount會輸出當前的掛載信息, -l加上多顯示label信息

                        -t 加上這個文件系統,不加則系統使用blkid去獲取文件系統的類型

                        -n 默認狀況下,這個系統掛載會實時寫入這個/etc/mstab中,以給其餘

                           程序運行使用,可是某些狀況(例如單用戶模式)爲了不問題,

                           會刻意不寫入 -n就是這個效果了

                        -L 利用卷標來掛載,必須獨一無二  使用這個就不用-t

                        -r :只讀掛載,經常使用於光盤

                        -w:讀寫掛載

                        -o:後面跟一些掛載的參數,

                                    rorw   只讀,讀寫

                                    asyncsync:文件系統同步寫入仍是異步,確定是異步效率高了

                                                     數據先保存在內存,定時或者隔一段時間寫回硬盤,屬於異步操做

                                    devnodev: 是否容許建立設備

                                    suidnosuid:是否容許文件有suid/sgid文件格式

                                    autonoauto:是否容許被自動掛載 -a

                                    execnoexec:是否能夠執行二進制文件

                                    usernouser:下達user容許通常用戶掛載

                                    default rwsuiddevexecautonousersync

                                    remount :從新掛載,系統出錯,更新參數的時候特別有用

                        suid比較危險,若是我在本身機子賦予suid,而後掛載到其餘機子,被掛載,極可能就有了suid,能夠執行惡意程序

 

注意:掛載文件系統的時候能夠不指定類型,系統會去自行測試,主要根據配置文件/etc/filesystems

[root@localhost ~]# cat /etc/filesystems

ext4

ext3

ext2

nodev proc

nodev devpts

iso9660

vfat

hfs

hfsplus

 

LINUX系統支持的文件系統的驅動所在目錄爲:[root@localhost ~]# ll /lib/modules/`uname -r`/kernel/fs/

例子:

1.掛載labeltest4的文件系統到/media/test4下,掛載屬性爲user,noexecro

[root@localhost ~]# mount LABEL="test4" /media/test4/ -o user,noexec

2.查看掛載的文件系統

clip_image049

2,掛載光驅,前面提到,系統會自動去檢測系統的類型 iso9660包括在檢測列表,因爲光盤是寫保護的,會自動掛載爲只讀ro

[root@localhost ~]# mount /dev/cdrom /media/cdrom/

mount: block device /dev/sr0 is write-protected, mounting read-only

指定類型:

[root@localhost ~]# mount -t iso9660 /dev/cdrom/ /media/cdrom/

mount: block device /dev/sr0 is write-protected, mounting read-only

 

3.掛載U

經過fdisk -l來查找這個新添加的設備的名稱

mount -t vfat -o iocharset=cp950 /dev/sdb4 /mnt/flash

iocharset用來指定這個語系 cp950是這個中文語系

 

4.從新掛載,出故障的時候特別管用

[root@localhost ~]# mount -o remount,rw,auto /media/test4/

根目錄是最重要的部分,而根目錄是沒有辦法卸載的,假如要修改掛載參數

              那要如何從新掛載?重啓,其實能夠不用的

[root@localhost ~]# mount -o remount,rw,auto /

 

umount

umount命令

功能:卸載設備

 

語法:

                        umount [-fn] 設備文件名或者掛載點

經常使用的選項

                        -f 強制卸載

                        -n 不更新/etc/mtab,正常掛載會把記錄在此文件,卸載則移除

卸載注意事項:

                        掛載的設備沒有進程使用,若是有,則沒法卸載,須要使用fuser命令

例子:

1.卸載/dev/sdc7labeltest4

[root@localhost ~]# umount /media/test4/

[root@localhost ~]# umount /dev/sdc7

 

 

fuser

fuser命令

功能:驗證某個進程正在使用的文件或者套接字

                 強制殺掉掛載點上的全部進程

語法:

                        fuser [option]  name(掛載點)

經常使用的選項

                        -v 查看某文件上正在運行的進程

                        -k kill文件

                        -km mountpoint :終止正在訪問此掛載點的全部進程,bash終端會被幹掉

 

例子:

1.查看光驅掛載點運行的程序

clip_image050

2.強制卸載有程序運行的設備

clip_image051

clip_image052

同時會把bash終端也殺掉。

2.3    讀取文件的底層詳解

2.3.1  目錄樹讀取文件的原理:

                                    因爲在目錄下操做文件須要有寫權限,首先須要這個目錄有寫權限

                                    系統經過掛在信息能夠獲得/根的inode號,經過stat查看是inode號是2,,而後就能夠根據inode號讀取blocknum,去blocknum裏面找到對應的信息主要是inode號碼  文件名字,依次類推,就能夠找到對應的文件所在的位置

clip_image054

例子:讀取文件/etc/passwd的過程:,root身份

clip_image056

1.    首先找到/inode 2,而且具備rx權限,找到對應的block,來找到etc對應的inode

2.    接着在etc目錄對應的block裏面找到相應的passwdinode

3.    最後經過passwdinode來查找對應block,因爲具備rw權限,所以能夠讀取passwd裏面的數據

在目錄/backup/下建立文件test的步驟是:

            1.掃描inode位圖,找到一個空閒的inode

            2./,經過掛載點獲取inode,而後在其block中找是否有backup(無則報錯結束)

            3.經過backupinode號找到其block,在裏面把test文件的inode和文件名寫進去

            4.再掃描bitmap,佔用,而後把block分配給文件存儲(通常會多分配block(未使用),防止增加而形成文件碎片)

在目錄/backup下刪除文件test的步驟:

            1./backup目錄的block文件的條目刪除

            2.testinode條目清除,inode bitmap位圖也釋放

            3.bitmap塊位圖也釋放test文件佔用的塊

 

同個分區下剪切文件爲何那麼快?

答:把文件名和inode在舊目錄下刪除,在新的目錄下寫入同樣的inode和文件名

 

那是否是一個目錄就佔用一個block呢?

答:固然不是了,那要看下這個目錄自己存放的文件的多少

clip_image058

 

2.3.2  linux系統下新建一個文件要怎麼處理呢?

             1.首先看下該用戶要在該目錄下是否是有這個r權限與這個x權限,有則進入該目錄

             2.再看下該用戶是否有這個w,有的話纔有資格添加文件

             3.查看這個inode bitmap找到一個空餘的inode號碼,並將這個權限和屬性寫進去,

               而且寫入這個目錄的block文件名對應條目

             4.查看這個block bitmap找到沒有使用block,根據大小選擇相對應數量的block

               把該文件的數據寫進去,而且更新inode指向的block號碼

             5.將這個blockinodeinode bitmapblock bitmap等信息寫入這個superblock和備份的superblock中去

其中這個superblockinode bitmapblock bitmap是在每次文件添加,刪除,更新過程常常會變化的,屬於中間數據

從上面能夠看出,要建立一個文件必須保持5個步驟一次性完成,纔不會形成文件系統的不一致。

所以這些操做必須異步進行,因此最後必定要同步到各個記錄數據點去。那假如系統在文件建立一半的時候崩潰了

那該如何解決這個問題呢?

            ext2系統只能同fsck e2fsck文件系統一致性檢查,看下有沒有這個unclean數據,如這個該inode bitmap使用了,

            可是這個inode裏面卻仍是空數據的狀況。不過要檢查整個文件系統,這是很是浪費時間的。那有什麼辦法可以在系統掛掉的時候記錄掛掉以前還未完成的任務呢?

            那就是日誌文件系統了,相似數據庫學過的保持數據完整性的方法是同樣的。

            1.當系統要寫入一個文件的時候,先把給文件要寫入的關鍵信息記錄在日誌中

            2.進行數據的正常寫入

            3.正常完成數據的寫入,在日誌記錄中完成文件的正常寫入

        windows系統異常關機也會進行磁盤的一致性修正,相似ext3windows也有日誌的功能,所以速度快點。

2.3.3  linux文件系統採起異步模式

 

linux文件系統是採用這個異步操做的模式,這樣能夠提升這個系統的運行速度

                衆所周知,內存速度比硬盤快了不少,因此若是把常常用到的數據寫到這個內存

                中,這樣能夠提升系統性能;當這個內存文件被修改過,就會被定義爲dirty數據,此時

                就按照某種機制寫回硬盤,sync就是強制內存數據寫回硬盤的操做的。

                因此關機的時候系統會自動調用sync來寫回數據回硬盤,記得多調用幾回sync,比較安全

                若是意外斷電了,那就要花不少時間了檢查文件系統的一致性了,甚至是文件系統部分數據

                的丟失損壞.

2.3.4  掛載點的意義:

                        掛載點必定是目錄,目錄是文件系統的入口

3      練習

練習:

1、建立一個1G的分區,文件系統爲ext4,卷標爲DATA,塊大小爲1024,預留管理空間爲磁盤分區的8%;掛載至/backup目錄,要求使用卷標進行掛載,且在掛載時啓動此文件系統上的acl功能;

mke2fs –t ext4 –L DATA –b 1024 –m 8 

mount –o acl LABEL=」DATA」 /backup

clip_image059

2、將此文件系統的超級塊中的信息中包含了blockinode的行保存至/tmp/partition.txt中;

[root@localhost ~]# dumpe2fs -h /dev/sdc7 | grep -E "block|inode" > /tmp/partition.txt

 

3、複製/etc目錄中的全部文件至此文件系統;然後調整此文件系統類型爲ext3,要求不能損壞已經複製而來的文件;

ext2已經不使用了,此題不作

4、調整其預留百分比爲3%

tune2fs –m 3 /dev/sdc7

clip_image060

5、以從新掛載的方式掛載此文件系統爲不更新訪問時間戳,並驗正其效果;

[root@localhost backup]# cp /etc/inittab .

clip_image062

[root@localhost ~]# mount -o remount,noatime /dev/sdc7 /backup

 

訪問文件[root@localhost backup]# cat inittab

clip_image064

時間戳不變

 

6、對此文件系統強行作一次檢測;

            [root@localhost ~]# umount /backup/ #必須先卸載

[root@localhost ~]# e2fsck -f /dev/sdc7

e2fsck 1.41.12 (17-May-2010)

Pass 1: Checking inodes, blocks, and sizes

Pass 2: Checking directory structure

Pass 3: Checking directory connectivity

Pass 4: Checking reference counts

Pass 5: Checking group summary information

DATA: 12/131584 files (0.0% non-contiguous), 69386/2104480 blocks

 

7、刪除複製而來的全部文件,並將此文件系統從新掛載爲同步(sync);然後再次複製/etc目錄中的全部文件至此掛載點,體驗其性能變化;

cp –r /etc/* /backup/ #速度很是快

rm –rf /backup/*

[root@localhost ~]# mount -o remount,sync /dev/sdc7 /backup

cp –r /etc/* /backup/  #速度至關慢

相關文章
相關標籤/搜索