天天看點

建立檔案系統

在說完了磁盤的分區之後,該說的就是建立檔案系統了,一塊磁盤在使用之前隻是一塊有磁性的物品而已,需要我們人為的對其進行規劃。是以使用磁盤的第一步是格式化。格式化分為低級格式化和進階格式化。低級格式化是在實體層面完成格式化,在磁盤裝置出廠的時候,通過低級格式化來建立磁道。在低級格式化完成之後,磁盤就具有了能夠使用的功能。但是我們要想往裡頭存資料,還需要更進一步的格式化,就叫做進階格式化,是在分區之後進行的,它的作用是用來建立檔案系統,為分區建構邏輯編址單元、簇和塊來完成資料的存儲。在這裡的一個塊隻能放置一個檔案的内容,而一個檔案能夠占用多個塊,是以如果一個分區在使用的時候已經确定要建立大量的小檔案,就把塊劃分的小一些,反之就大一些。當然,如果分區空間比較大,塊也應該大一些。

低級格式化是不用我們來完成的,在出廠的時候就已經被低級格式化了,我們需要做的是進階格式化。那麼進階格式化具體做什麼呢?來看一看百度百科是這麼說的“進階格式化又稱邏輯格式化,它是指根據使用者標明的檔案系統(如FAT12、FAT16、FAT32、NTFS、EXT2、EXT3等),在磁盤的特定區域寫入特定資料,以達到初始化磁盤或磁盤分區、清除原磁盤或磁盤分區中所有檔案的一個操作。進階格式化包括對主引導記錄中分區表相應區域的重寫、根據使用者標明的檔案系統,在分區中劃出一片用于存放檔案配置設定表、目錄表等用于檔案管理的磁盤空間,以便使用者使用該分區管理檔案”。簡單來說就是為分區建立檔案系統。建立檔案系統實際上就是給分區進行存儲空間的邏輯編址。

在一個分區中建立檔案系統的步驟為先将分區劃分成大小相等的若幹塊,其中包括:

1.中繼資料塊——記錄的是中繼資料——inode(index node)、檔案的屬性、檔案大小、檔案權限、檔案所有者、檔案時間戳和資料塊指針。存放中繼資料的固定的存儲空間,稱為inode,每個inode都有其對應的inode編号。

2.資料塊——存放檔案中所包含的流式資料

資料都存在資料塊中,如果想要查找/var/log/messages檔案的内容,首先查找/目錄inode編号,從中繼資料區域中找到對應inode,再讀取inode中的資料塊指針,找到存放/目錄内容的資料塊。在資料塊中查找名稱為var的檔案名,如果有,就定位其inode編号,再到中繼資料區域中查找對應編号的inode,再根據資料塊指針找到儲存var目錄内容的資料塊。然後,在該資料塊中查找名稱為log的檔案名,如果有,就定位其inode編号,再到中繼資料區域中查找對應編号的inode,再根據資料塊指針找到儲存log目錄内容的資料塊。之後,在該資料塊中查找名稱為messages的檔案名,如果有,就定位其inode編号,再到中繼資料區域總查找對應編号的inode,再根據資料塊指針找到messages檔案對銀的資料塊,就可以讀取資料。這種方法看起來十分麻煩,但是友善了我們對檔案的管理,同時系統會将上面說的這些操作封裝起來,我們隻需要知道這個流程即可,并不用我們自己按照這種方法查找檔案。

在檔案系統中存在這一些特殊的東西,他們也很重要,分别有各自的功能:

1.特殊檔案——像裝置檔案:block special 或 character special,這類檔案僅僅是将中繼資料中的資料塊指針換成了裝置号。還有符号連結檔案:symbolic link,這類檔案僅僅是将中繼資料中的資料塊指針換成了另一個檔案的通路路徑。想這種特殊檔案,隻占據中繼資料區域,沒有資料塊占用。

2.塊組——随着磁盤空間越來越大,劃分的塊的數量也越來越多,管理起來很不友善,而劃分塊組可以解決該問題。每個塊組中有獨立的中繼資料塊和資料塊,存放資料的時候,以塊組内的資料塊優先選擇,如果塊組内的資料塊不夠,可以通過存儲政策來請多個塊組協同存儲。

3.超級塊——主要定義了有多少個塊組,以及每個塊組的邊界。

4.日志塊——為了防止超級塊發生故障倒置整個檔案系統崩潰,對超級塊進行備援備份,對于資料的寫入操作做記錄的塊,目的在于防止資料不一緻,而這種資料不一緻通常都是由不潔關機或不潔斷電導緻的。

在不同的分區中有自己不同的檔案系統,大緻有以下這些:

Linux的檔案系統:

 ext ext2 ext3 ext4(支援的最大分區50TB)

 xfs(企業級64位檔案系統,最大分區500TB)

 reiserfs(良好的反删除功能)

 btrfs(技術預覽版)

交換分區檔案系統:swap

CD光牒檔案系統:iso9660

網絡檔案系統:NFS、CIFS

叢集檔案系統:gfs2、ocfs2

核心級的分布式檔案系統:ceph

僞檔案系統:proc、sysfs、tmpfs、hugepagefs

windows的檔案系統:vfat,ntfs

Unix的檔案系統:ufs,FFS,JFS,zfs

使用者空間中的分布式檔案系統:mogilefs,moosefs,glusterf

不同的CentOS系統版本預設的檔案系統也不同,分别為:

CentOS5:ext3

CentOS6:ext4

CentOS7:xfs

有關于檔案系統的工具分為以下四類(括号裡的為這個指令的衍生版):

 建立檔案系統——mkfs(mkfs.ext2, mkfs.ext3, mkfs.ext4, mkfs.xfs, mkfs.btrfs, ...)

 檔案系統檢測和修複工具——fsck(fsck.ext3, fsxk.ext3, fsck.ext4, fsck.xfs, ...)

 檔案系統屬性檢視工具——dumpe2fs

 檔案系統的屬性調整工具——tune2fs

下面對這些指令進行介紹:

建立檔案系統工具(fdisk指令可以在):

mkfs指令建立檔案系統:

mkfs - build a Linux filesystem

mkfs [options] [-t type] [fs-options] device [size]

使用-t選項指定要建立的檔案系統的類型,比如:

mkfs -t ext2 /dev/sdb1

注意:

如果使用磁盤裝置作為mkfs的參數,所有的分區都将被删除

如果使用擴充分區作為mkfs的參數,所有的邏輯分區都将被删除

在上面提到的mkfs.ext2, mkfs.ext3, mkfs.ext4, mkfs.xfs, mkfs.btrfs,...就是這個指令的簡寫版本,比如:

mkfs.ext4等同于mkfs -t ext4 /dev/sdb1

而如果隻是計劃建立ext系列檔案系統的話,可以使用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 fstype:指定檔案系統類型,ext2 ext3 ext4,預設是ext2

 -O [^]feature[,...]:關閉或開啟檔案系統的特性

 -L volume-label:為檔案系統指定卷标

使用方法和mkfs類似,例如:

mke2fs -t ext3 /dev/sdb1      

如果隻計劃修改ext系列檔案系統的卷标,可以使用e2label指令:

e2label - Change the label on an ext2/ext3/ext4 filesystem

e2label device [ new-label ]

 如果不加卷标資訊,表示檢視指定裝置的卷标;

 如果添加了卷标資訊, 表示修改指定裝置的卷标;

e2label /dev/sdb1 LabelName      

如果想要修改ext系列檔案系統的屬性,可以使用tune2fs指令:

tune2fs:

tune2fs  - adjust tunable filesystem parameters on ext2/ext3/ext4 filesystems

 用來調整那些在ext2,3,4檔案系統上的可修改的參數;

 -j:将ext2檔案系統修改為ext3;

 -m reserved-blocks-percentage:修改為超級使用者預留的磁盤空間的百分比;

 -o [^]mount-options[,...]:修改檔案系統的預設挂載選項;

 -r reserved-blocks-count:修改為超級使用者預留的磁盤空間的塊的數量;

 -L volume-name:修改檔案系統的卷标

 -O [^]feature[,...]:修改檔案系統的特性,将其關閉或啟用;

 -l:顯示超級塊的内容  相當于dumpe2fs -h 

使用這個指令可以修改檔案系統的屬性,例如使用-j選項可以将“ext2”修改為“ext3”檔案系統,例如:

tune2fs -j /dev/sdb1    #當然要想使用這個指令前,檔案的系統必須為“ext2”      

檔案系統的檢測修改工具:

fsck

 -t fstype:指定要檢測的檔案系統類型;

 -a:無需互動,自動修複所有問題

 -r:互動式修複問題

ext系列檔案系統專門的檢測修複工具:

 e2fsck

  -y:在互動過程的所有的問題,都以"yes"回答;

  -f:強制檢測修複;即使檔案系統處于clean狀态;

blkid:用來檢視裝置資訊(UUID等)

blkid - command-line utility to locate/print block device attributes

 blkid -L label:根據卷标進行查找

 blkid -U uuid:根據UUID進行查找

findfs:

findfs - Find a filesystem by label or UUID

 findfs LABEL=label

 findfs UUID=uuid

建立swap檔案系統

 前提:分區類型必須是swap類型

修改的方法是:在fdisk互動模式中,使用t指令将指定分區的類型修改為82即可;

mkswap

mkswap - set up a Linux swap area

 -L LABEL:設定互動分區的卷标

 -f:強制執行

在為分區建立了檔案系統之後我們就可是使用這個分區了,但是就像是一個U盤,我們必須将其插到電腦上才能真正的使用這個U盤,這個操作在Linux中叫做挂載,使用使用mount指令完成挂載操作。根檔案系統之外的其他檔案系統如果想要被通路;都必須通過某種方式關聯到根檔案系統上,具體做法就是把其他檔案系統裝載到根檔案系統中的某個目錄之中。這個過程稱為"挂載"。用于關聯其他檔案系統的那個目錄,稱為挂載點(mount point)。作為挂載點的目錄必須事先存在,并且應該是沒有被使用或不能被其他程序使用的目錄。作為挂載點的目錄一旦挂載檔案系統,其内原有的檔案将被隐藏,也就是說建立了一個目錄作為挂載點,而這個目錄中原本就有内容,那麼挂載之後再進入這個目錄就會進入被挂載的裝置,因而通路不到原來目錄中的檔案。下面是mount指令的常見選項:

mount - mount a filesystem

mount [-fnrsvw] [-t vfstype] [-o options] device dir

 -r:readonly,以隻讀的方式挂載目标檔案系統;CD光牒

 -w:read and write,以讀寫的方式挂載目标檔案系統;

 -n:預設情況下,裝置挂載或解除安裝的操作會同步更新到/etc/mtab中,如果在挂載時使用了-n選項,則表示我們要禁用此特性,即便挂載成功,也不會更新到/etc/mtab中。

 -t vsftype:指明要挂載的裝置上建立的檔案系統類型;如果省略該選項,mount指令會通過blkid來判斷要挂載的目标裝置的檔案系統類型;

 -L LABEL:挂載檔案系統時,使用卷标代替裝置名稱

 -U UUID:挂載檔案系統時,使用UUID代替裝置名稱

 -a:mount -a:按照/etc/fstab檔案(下面會介紹這個檔案)中填寫的裝置進行自動挂載;

 -o option:

   sync/nosync:同步/異步操作

   atime/noatime:檔案或目錄被讀取通路時,是否更新通路時間戳;

   diratime/nodiratime:目錄被讀取通路時,是否更新通路時間戳;

   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, and relatime

   loop:使用環回裝置;将鏡像檔案挂載到挂載點;

   defaults,ro,nosuid

 -B, --bind:将某個目錄綁定至另一個目錄;

 mount --bind|-B 源目錄 目标目錄

使用這個指令的時候如果不給出參數,那麼在螢幕上顯示的是所有已經被挂載的資訊。挂載的指令可以寫成以下格式:

mkdir -pv /media/sdb #首先要建立挂載點      
mount /dev/sdb1 /media/sdb/ 
#然後就可以使用這個指令進行挂載,可以在這個指令的基礎上根據自己想要的功能添加不同的選項。值得注意的是這個指令的兩個參數第一個是裝置,第二個才是挂載點,一定不能寫反了      

既然有了挂載,那麼就一定需要解除安裝,使用umount這個指令進行解除安裝。這個指令後頭的參數既可以是裝置名,也可以是挂載點的名字,達到的效果都是一樣的。我們可以做一個實驗,就是挂載一個裝置,在裡頭建立一個檔案,然後解除安裝這個裝置,然後再挂載這個裝置。每執行一步操作就去觀察挂載點目錄中的檔案的變化,可以發現裝置中和挂載點中的檔案互不影響。就像U盤一樣,拔下再插上,其中的資訊并不丢失。

CD光牒的裝置名為/dev/sr0,可以對其進行挂載和解除安裝實驗。

互動分區有自己的挂載指令——swapon(挂載), swapoff(解除安裝)

在最後說一說上面提到的/etc/fstab檔案,這個檔案是提供給系統的,供系統在開機的時候自動完成挂載。但是我們可以對其進行修改,然後配合mount或swapon的“-a”選項來從這個檔案中讀取挂載的資訊。下面是對/etc/fstab檔案中各個字段含義的解釋:

每一行從左到右共6個字段,使用空白字元分隔:

1.要挂載的裝置(可以為以下内容)

 裝置檔案名

  LABEL

  UUID

 僞檔案系統

2.挂載點(swap裝置無需挂載點,指定swap即可)

3.檔案系統類型

4.挂載選項:defaults(也可以是在mount指令中提到的其他選項)

5.轉儲頻率(使用dump指令備份分區的頻率)

 0)表示不備份

 1)每天備份一次

 2)每隔一天備份一次

6.自檢次序

 0)不自檢

 1)優先自檢,通常隻設定在根檔案系統上;

 2)次級自檢

 ...

9:最低優先級自檢

下面做一個簡單的挂載例子:

#
# /etc/fstab
# Created by anaconda on Sun Mar  5 23:34:53 2017
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
UUID=b95007c7-b67c-44cd-9358-a5e6c641f359 /                       xfs     defaults        0 0
UUID=cb6a4053-6e82-431e-819c-f84ce24bc53b /boot                   xfs     defaults        0 0
UUID=dbff2573-f90e-45a4-9d6d-eea9d5ff71b3 swap                    swap    defaults        0 0      
UUID=6d550301-ac28-4dc5-9056-b489b16cd182 /media/sdb/ ext3 defaults 0 0      

繼續閱讀