寫這篇的目的,還是要把整個過程完整的記錄下來,特別是小細節的地方,通常很多情況是一知半解,平時不實踐操作只憑看是沒有用的,所以做這個行業就是要多動手,多學習,多思考慢慢你的思路也會打開。練就自己的學習能力和動手能力很重要。由於時間比較倉促,難免會有遺漏的點,我每一篇文章都可能會進行相關的糾正,包括格式和敘述方式等,還望見諒。這篇博文的標題也是一直在改。(這篇博文再多次修改之后,發現有點冗長,但是如果仔細去分析,會發現對於整體認識有好處,涉及很多的基礎點)
復習和回顧一些小的知識點,對於理解這篇文章會很有好處:
1、機械硬盤接口類型主要分為以下幾種
1、IDE接口,IDE代表着硬盤的一種類型,IDE接口硬盤多用於家用產品中,也部分應用於服務器。人們也習慣用IDE來稱呼最早出現IDE
類型硬盤ATA-1,這種類型的接口隨着接口技術的發展已經被淘汰了,而其后發展分支出更多類型的硬盤接口,比如ATA、Ultra ATA、DMA、Ultra DMA等接口都屬於IDE硬盤。
以上是傳統的並行ATA傳輸方式,后來又出現了串行ATA(Serial ATA,簡稱SATA),其最大數據
傳輸率更進一步提高到了150MB/sec,將來還會提高到300MB/sec,而且其接口非常小巧,排線
也很細,有利於機箱內部空氣流動從而加強散熱效果,也使機箱內部顯得不太凌亂。與並行ATA相比
,SATA還有一大優點就是支持熱插拔
2、SATA接口,使用SATA接口的硬盤又叫串口硬盤,這是目前主流的接口類型,機械硬盤基本就是這個接口。固態硬盤也一樣,采用2.5英寸設計,SATA是Serial Advanced Technology Attachment的縮寫,SATA采用串行連接方式,串行ATA總線使用嵌入式時鍾信號,具備了更強的糾錯能力。
4、光纖通道接口,光線通過類型硬盤的英文名稱為Fibre Channel,其最初設計也不是為了硬盤設計開發的接口,是專門為網絡系統設計的,但隨着存儲系統對速度的需求,才逐漸應用到硬盤系統中。光纖通道是為向服務器這樣的多硬盤系統環境而設計的,有熱插拔性,高速帶寬,遠程連接,連接設備數量大等特點。
5、SCSI接口,SCSI是Small Computer System Interface的縮寫,擁有傳輸速率高、讀寫性能好、可連接多個設備、可支持熱插拔、價格比較貴的特點。SCSI接口硬盤主要應用於中、高端服務器和高檔工作站中。
6、SAS接口,SAS串行連接SCSI,是新一代的SCSI技術,與SATA硬盤相同,都是采用串行技術以獲得更高的傳輸速度.SAS的接口技術可以向下兼容SATA,但反過來SATA系統並不兼容SAS。
7、ATA-1(IDE):ATA是最早的IDE標准的正式名稱,IDE實際上是指連在硬盤接口的硬盤本身。ATA在主板上有一個插口,支持一個主設備和一個從設備,每個設備的最大容量為504MB,ATA最早支持的PIO-0模式(Programmed I/O-0)只有3.3MB/s,而ATA-1一共規定了3種PIO模式和4種DMA模式(沒有得到實際應用),要升級為ATA-2,需要安裝一個EIDE適配卡
8、ATA-2 (EIDE Enhanced IDE/Fast ATA):這是對ATA-1的擴展,它增加了2種PIO和2種DMA模式,把最高傳輸率提高到了16.7MB/s,同時引進了LBA地址轉換方式,突破了老BIOS固有504MB的限制,支持最高可達8.1GB的硬盤。如你的電腦支持ATA-2,則可以在CMOS設置中找到(LBA,LogicalBlock Address)或(CHS,Cylinder,Head,Sector)的設置。其兩個插口分別可以連接一個主設備和一個從設置,從而可以支持四個設備,兩個插口也分為主插口和從插口。通常可將最快的硬盤和CD-ROM放置在主插口上,而將次要一些的設備放在從插口上,這種放置方式對於486及早期的Pentium電腦是必要的,這樣可以使主插口連在快速的PCI總線上,而從插口連在較慢的ISA總線上。
9、ESDI接口:即(Enhanced Small Drive Interface)接口,它是邁拓公司於1983年開發的。其特點是將編解碼器放在硬盤本身之中,而不是在控制卡上,理論傳輸速度是前面所述的ST-506的2…4倍,一般可達到10Mbps。但其成本較高,與后來產生的IDE接口相比無優勢可言,因此在九十年代后就被淘汰了
2、硬盤種類主要是機械硬盤和固態硬盤
硬盤是計算機的主要外部存儲設備。計算機中的存儲設備種類非常多,常見的主要有光盤、硬盤、U 盤等,甚至還有網絡存儲設備 SAN、NAS 等,不過使用最多的還是硬盤。如果從存儲數據的介質上來區分,硬盤可分為機械硬盤(HDD)和固態硬盤(SSD),機械硬盤采用磁性碟片來存儲數據,而固態硬盤通過閃存顆粒來存儲數據。
3、關於設備種類
Linux 中一切都是文件,包括硬盤、鼠標、打印機等硬件設備也通常被表示映射為文件即塊設備,用來表示這些硬件設備的文件的名字即為“設備文件名”。一般設備文件名保存在 /dev/ 目錄下,Linux 中常見的硬件設備(映射為塊設備)的設備文件名如下:
另外字符( char ) 設備是一種可以當作一個字節流來存取的設備( 如同一個文件 ); 字符驅動模塊負責實現這種行為。
這樣的驅動模塊至少實現 open, close, read, 和 write 系統調用。文本控制台( /dev/console )和串口( /dev/ttyS0 及其他 )是字符設備的例子, 因為它們很好地展現了流的抽象。字符設備通過文件系統結點來存取, 例如 /dev/tty1 和 /dev/lp0。
還有一種就是網絡設備。
linux由於一切是文件必然要求你對相關的設備要做映射關系。 比如:硬盤就需要你掛載硬盤到服務器,大部分服務器安裝的操作系統都能自動識別添加的硬件,這個時候還不能使用
需要你對該硬盤進行分區、格式化、目錄掛載等一系列操作之后才能使用。
四、驅動種類
Linux將驅動分為三大類:字符設備驅動、塊設備驅動以及網絡設備驅動。
1、字符設備驅動:顧名思義,應用程序與驅動程序之間的數據交互是以字符(字節)為單位的,字符設備通常沒有中間緩存。常見的字符設備有:led、key、camera、顯卡、串口等
2、塊設備驅動:顧名思義,應用程序與驅動程序之間的數據交互是以塊為單位的,主要針對的是存儲設備,通常設有中間緩存,並且帶有文件系統,可以任意位置訪問。常見的塊設備有:U盤、eMMC、SD卡等
3、網絡設備驅動:網絡設備面向數據包的發送而設計,它並不對應於文件系統的節點。即不對應 /dev 目錄下的設備文件,應用程序最終通過套接字
socket 完成與網絡設備的數據交互。常見的網絡設備有網卡(無線網卡、有線網卡)。
如果做過開發嵌入式開發,應該很好理解驅動程序概念,塊設備的驅動例如硬盤,攝像頭,一般都是硬件廠商會給驅動程序包,封裝對硬件的操作,給上層提供接口,接口應用再去調用這些接口。windows下一般都dll。操作系統會有大量的一些驅動程序,屏蔽了對硬件的操作。上面只要關注程序開發即可。
windows靜態庫文件就是.lib文件,動態庫文件就是.dll文件
unix系統的靜態庫文件和動態庫文件后綴分別是.a和.so
五、linux文件種類
包括普通文件、目錄文件(目錄也是文件)、鏈接文件(軟鏈接和硬鏈接)、設備文件(塊設備和字符設備)
這里特別說下字符設備是一種按字節來訪問的設備,字符驅動則負責驅動字符設備,
這樣的驅動通常實現open、close、read和write系統調用。例如:串口、Led、按鍵等
六、linux文件系統
虛擬文件系統(VFS) 操作模型,通過mkfs.xxx等這種系列性的命令創建格式化很多不同的文件系統,
比如:mkfs.ext4 /dev/sda 、 mkfs.btrfs /dev/sdb等,但這些不同的文件系統都有各自的API接口,
而用戶想要的是,不管你是什么API,他們只關心mount/umount,或open/close等操作,等於屏蔽了底層的文件系統類型,
運維層面只關心mount等操作即可。不同的文件系統類型有不同的特點,因而根據存儲設備的硬件特性、系統需求等有不同的應用場合,什么意思呢,也就是說
假如你用了不同設備都是硬盤,那么建立這個硬盤可以用不同的文件系統來做映射,可能就會獲得不同的性能提升。還是要看
相關的設備種類和廠商設計的目的。
vfs模型關系是:
物理磁盤---》
設備驅動 ----》
io操作接口抽象----》
ex2/ext3/xfs----》
vfs(對不同的文件系統的抽象處理為上層提供api接口)---》
系統調用命令
文件系統 | 描 述 |
---|---|
Ext | Linux 中最早的文件系統,由於在性能和兼容性上具有很多缺陷,現在已經很少使用,是為 Linux 核心所做的第一個文件系統,最大可支持 2GB 的文件系統。 |
Ext2 | 是 Ext 文件系統的升級版本,Red Hat Linux 7.2 版本以前的系統默認都是 Ext2 文件系統。於 1993 年發布,支持最大 16TB 的分區和最大 2TB 的文件(1TB=1024GB=1024x1024KB) Linux正統的文件系統(如ext2、ext3)一個文件由目錄項、inode和數據塊組成。 |
Ext3 | 是 Ext2 文件系統的升級版本,最大的區別就是帶日志功能,以便在系統突然停止時提高文件系統的可靠性。支持最大 16TB 的分區和最大 2TB 的文件 |
Ext4 | 是 Ext3 文件系統的升級版。Ext4 在性能、伸縮性和可靠性方面進行了大量改進。Ext4 的變化可以說是翻天覆地的,比如向下兼容 Ext3、最大 1EB 文件系統和 16TB 文件、無限數量子目錄、Extents 連續數據塊 概念、多塊分配、延遲分配、持久預分配、快速 FSCK、日志校驗、無日志模式、在線碎片整理、inode 增強、默認啟用 barrier 等。它是 CentOS 6.3 的默認文件系統 |
xfs | 被業界稱為最先進、最具有可升級性的文件系統技術,由 SGI 公司設計,目前最新的 CentOS 7 版本默認使用的就是此文件系統。 |
swap | swap 是 Linux 中用於交換分區的文件系統(類似於 Windows 中的虛擬內存),當內存不夠用時,使用交換分區暫時替代內存。一般大小為內存的 2 倍,但是不要超過 2GB。它是 Linux 的必需分區 |
NFS | NFS 是網絡文件系統(Network File System)的縮寫,是用來實現不同主機之間文件共享的一種網絡服務,本地主機可以通過掛載的方式使用遠程共享的資源 |
iso9660 | 光盤的標准文件系統。Linux 要想使用光盤,必須支持 iso9660 文件系統 |
fat | 就是 Windows 下的 fatl6 文件系統,在 Linux 中識別為 fat |
vfat | 就是 Windows 下的 fat32 文件系統,在 Linux 中識別為 vfat。支持最大 32GB 的分區和最大 4GB 的文件 |
NTFS | 就是 Windows 下的 NTFS 文件系統,不過 Linux 默認是不能識別 NTFS 文件系統的,如果需要識別,則需要重新編譯內核才能支持。它比 fat32 文件系統更加安全,速度更快,支持最大 2TB 的分區和最大 64GB 的文件 |
ufs | Sun 公司的操作系統 Solaris 和 SunOS 所采用的文件系統 |
proc | Linux 中基於內存的虛擬文件系統,用來管理內存存儲目錄 /proc |
sysfs | 和 proc —樣,也是基於內存的虛擬文件系統,用來管理內存存儲目錄 /sysfs |
tmpfs | 也是一種基於內存的虛擬文件系統,不過也可以使用 swap 交換分區 |
一、 硬盤分區基礎知識
磁盤分區類型:
硬盤分區最常見的類型為msdos和gpt,前者表示MBR分區,而后者表示GPT分區。
傳統的BIOS只支持MBR分區硬盤啟動,一個硬盤只能分成四個分區,並且單個分區最大不超過2TB。
GPT(即GUID分區表)是源自EFI標准的一種較新的磁盤分區表結構的標准,是未來磁盤分區的主要形式。
與MBR分區方式相比,突破MBR4個主分區限制,每個磁盤最多支持128個分區,持大於2T的分區,最大卷可達18EB。
1、MBR分區:
MBR的意思是“主引導記錄”,它有自己的啟動器,也就是啟動代碼,一旦啟動代碼被破壞,系統就沒法啟動,
只有通過修復才能啟動系統。最大支持2TB容量(T; terabytes,1TB=1024GB),
對分區的設限:最多4個主分區或3個主分區加一個擴展分區。
創建工具典型有fdisk。
2、GPT分區:
GPT意為GUID分區表,這是一個正逐漸取代MBR的新標准,它由UEFI輔住而形成的,這樣就有了UEFI用於取代老舊的BIOS,
而GPT則取代老舊的MBR。這個標准沒有MBR的那些限制比如:容量2T限制、分區個數限制等。磁盤驅動器容量可以大得多,
大到操作系統和文件系統都沒法支持。它同時還支持幾乎無限個分區數量,限制只在於操作系統,Windows支持最多128個GPT分區。
GPT和MBR是不同的分區表類型。使用MBR分區表的硬盤最多只能划分4個主分區磁盤,並且MBR最大僅支持2TB的硬盤。
如果需要分區的硬盤容量超過2TB了,則需要使用GPT分區表類型,此分區表類型不受分區個數、硬盤大小的限制。
創建GPT分區典型工具有parted,gdisk,sgdisk等,fdisk不支持創建GPT分區。
我們管理的服務器可能會隨着業務量的不斷增長而造成磁盤數據空間不足的情況(不考慮inode),這個時候我們就可能需要增加磁盤或掛載一些其他的塊設備,這里我主要介紹如何使用fdisk分區工具創建磁盤分區和掛載分區。最重要的三步就是:
1、創建主分區。(主分區創建之后可以馬上被使用但不能再分區)
2、創建擴展分區 (擴展分區必須再進行二次分區后才能被使用)
3、在擴展分區上創建邏輯分區(擴充分區再分下去的是什么呢?它就是邏輯分區(Logical Partion))
Linux下單個磁盤最多可以有15個分區。3個主分區 + 1個擴展分區 + 11個邏輯分區。
建議的分區方法是:先分3個主分區,第四個分區為擴展分區,然后在擴展分區中再分成11個邏輯分區。
在unix/linux系統中,一切都是文件。所有硬盤、軟盤、鍵盤等設備都用文件來代表,對應 着/dev下面的文件。對於應用程序來說,可以像對待普通文件一樣打開,關閉、讀寫這些設備文件。但是這種文件名,比如/dev/sda、/dev /raw/raw1都是用戶空間名稱,OS Kernel根本不知道這個名稱指的是什么。在內核空間是通過major、minor device number 來區分設備的
塊設備也是通過/dev目錄下的文件系統節點來訪問。塊設備上能夠容納文件系統。
常見的塊設備如磁盤、emmc flash、nand flash、 SD卡等。
在linux系統中/dev目錄下使用ls -l命令查看詳細信息,第一個字母“b”為塊設備文件的標識。
/dev下每個塊設備文件對應一個磁盤的分區。
注:實際在面試中發現很多運維人員連基礎的硬盤操作都有有限,也是不理解的事情,在公司就是個混,一個5~6年出來的運維工程師連基礎操作都不具備,出去找工作也是被人詬病。
如果是幾台服務器,公司業務也沒有起色也罷,也談不上什么運維規划,但是職業技能總該提高吧,網上資源還是很豐富的,但是說實在的很多寫的不是很細致,所以我這段寫的先鋪面,后進行整理
力求做到不誤導別人。
首先我處的環境,機器眾多,磁盤規划不是很合理,有的只是加了硬盤,但是沒有做任何處理,浪費也比較嚴重,所以運維也可以說公司的重中之重。作為一個管理者來說,對於運維部分的掌握很重要,否則你會發現這里浪費現象很嚴重。
二、創建分區
雖然支持mbr的硬盤(容量小於等於2T)分區表中最多能存儲四個分區,但我們實際使用時一般只分為兩個分區,
一個是主分區(Primary Partion)一個是擴展分區(extended partition)兩種,主分區可以馬上被使用但不能再分區,擴展分區必須再進行分區后才能使用,也就是說它必須還要進行二次分區。那么由擴充分區再分下去的是什么呢?它就是邏輯分區(Logical Partion)。 對習慣於使用Dos或Windows的朋友來說,有幾個分區就有幾個驅動器,並且每個分區都會獲得一個字母標識符,然后就可以選用這個字母來指定在這個分區上的文件和目錄,它們的文件結構都是獨立的,非常好理解。
因為對Linux用戶來說無論有幾個分區,分給哪一目錄使用,它歸根結底就只有一個根目錄,一個獨立且唯一的文件結構。
Linux中每個分區都是用來組成整個文件系統的一部分,因為它采用了一種叫“掛載點”的處理方法,它的整個文件系統中包含了一整套的文件和目錄,且將一個分區和一個目錄聯系起來。這時要載入的一個分區將使它的存儲空間在一個目錄下獲得。
查看下操作系統情況(本實例在測試過程中,fp-web-126主機出現問題,所以fp-web-130主機都執行了相同的操作,所以不影響,包括環境都相同)
[root@fp-web-130 ~]# cat /etc/redhat-release
CentOS Linux release 7.2.1511 (Core)
[root@fp-web-130 ~]# uname -r
3.10.0-327.el7.x86_64
1、 fdisk -l 查看塊設備情況(塊設備包括硬盤,U盤,SD卡)
lsblk命令可以列出所有可用塊設備的信息,比如我們說的邏輯磁盤,默認情況下將以樹狀列出所有塊設備。
注意: 回環設備也是屬於塊設備(即虛擬塊設備, 回環設備是將普通磁盤文件模擬成塊設備來使用的驅動,可以把光盤、磁盤中的數據以普通文件的形式存在並被模擬成光盤或者磁盤來使用,回環設備最好要理解,應該docker架構闡述中應用的比較多)
從下面圖可以清晰的看到sdb是一個沒有掛載和分區的磁盤(等待我們去做分區,格式化,掛載等操作)
獲取SCSI設備的列表,你只能使用-S選項
lsblk命令輸出結果解釋:
NAME : 該項這是塊設備名。
MAJ:MIN : 該項顯示主設備號和次設備號,次設備號是內核來去用的。
//關於主設備和次設備號,請看 https://www.cnblogs.com/aozhejin/p/15874504.html
RM : 該項顯示設備是否可移動設備。注意,在本例中設備sdb和sr0的RM值等於1,這說明他們是可移動設備。
SIZE : 該項列出設備的容量大小信息。例如298.1G表明該設備大小為298.1GB,而1K表明該設備大小為1KB。
RO : 該項表明設備是否為只讀。在本案例中,所有設備的RO值為0,表明他們不是只讀的。
TYPE : 該項顯示塊設備是否是磁盤或磁盤上的一個分區。在本例中,sda和sdb是磁盤,而sr0是只讀存儲(rom)。
MOUNTPOINT : 該項指出設備掛載的掛載點。
ls -l /dev 查看設備,當然字符設備對應的文件也都在/dev目錄下,每一個文件對應一個硬件。在linux系統中/dev目錄下使用ls -l命令查看詳細信息,
第一個字母“c”為字符設備文件的標識,塊設備文件,對應是b開頭(磁盤就是塊設備)
2.分區規划
查看完,我們做一個規划,整個硬盤sdb大小是200G, 要對磁盤sdb分1個主分區(我用了1/6設置為sdb1),1個擴展分區,在擴展分區里面建1個邏輯分區
下面的操作都是實際linux 根據命令執行的情況,復制的顯示內容。盡量讓人一看就明白,但是確實需要自己動手去做,這樣體會更深。
不同系統或者版本可能差異是有的.
3、 下面對/dev/sdb 進行分區:
[root@localhost Desktop]# fdisk /dev/sdb
Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel Building a new DOS disklabel with disk identifier 0x1949791c. Changes will remain in memory only, until you decide to write them. After that, of course, the previous content won't be recoverable. Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite) WARNING: DOS-compatible mode is deprecated. It's strongly recommended to switch off the mode (command 'c') and change display units to sectors (command 'u'). Command (m for help): m //輸入m查看幫助文檔 Command action a toggle a bootable flag b edit bsd disklabel c toggle the dos compatibility flag d delete a partition l list known partition types m print this menu n add a new partition //添加一個新的分區 o create a new empty DOS partition table p print the partition table q quit without saving changes s create a new empty Sun disklabel t change a partition's system id u change display/entry units v verify the partition table w write table to disk and exit x extra functionality (experts only) Command (m for help): n //
輸入n,回車新建分區
Partition type:
p primary (0 primary, 0 extended, 4 free)
e extended
Select (default p): p
Partition number (1-4, default 1):1 #分區號為1,分區號是1到4
注意: 首先是輸入n ,詢問我們是要創建主分區還是擴展分區,主分區最多只能創建4個,如果創建了擴展分區那么擴展分區需要占用一個主分區。
3、先建一個主分區
有擴展分區和主分區,邏輯分區在擴展分區中建立。注意到括號中的1-4,最多只能建四個主分區(包括擴展分區)。
#重復上面的,具體來看看建一個主分區如何操作
Command (m for help):n //輸入n回車 Partition type:
p primary (0 primary, 0 extended, 4 free)
e extended Select (default p): p #輸入p表示創建主分區,回車 Partition number (1-4): 1 #分區號為1,分區號是1到4,我們這里輸入1,回車 First sector (2048-419430399, default 2048): #直接回車默認從第一個柱面開始划分,默認分區起始位置是從2048開始
Using default value 2048
First sector (2048-419430399, default 2048): 2048
Last sector, +sectors or +size{K,M,G} (2048-419430399, default 419430399): 69905066 //這里直接默認回車將全部都分配給當前創建的主分區,這里肯定不想,所以需要這里設置一個值,我用計算器419430399/6=69905066
Partition 1 of type Linux and of size 33GiB is set
Command (m for help): p //這時再次出現提示: 這里輸入p,查看創建情況
Disk /dev/sdb: 214.7 GB, 214748364800 bytes, 419430400 sectors //硬盤整個的信息
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0xbd1a05e2
Device Boot Start End Blocks Id System
/dev/sdb1 2048 69905066 34951509+ 83 Linux
注: 每次操作完畢,就會回到 Command (m for help): 提示讓你繼續操作。
4、建立擴展分區
我們繼續創建擴展分區
Command (m for help):n
Partition type:
p primary (1 primary, 0 extended, 3 free)
e extended
Select (default p):e //輸入e,表示要創建擴展分區
Partition number (2-4, default 2): 2 //輸入2回車,開始創建繼續擴展分區
First sector (69905067-419430399, default 69906432):
//這里我直接回車
Using default value 69906432: Last sector, +sectors or +size{K,M,G} (69906432-419430399, default 419430399): //這里也直接回車,表示把剩下的部分都划給擴展分區
Using default value 419430399
Partition 2 of type Extended and of size 166.7 GiB is set(這里翻譯為分區2為擴展分區,大小為166.7G被設置)
Command (m for help): p //出現提示,輸入p查看當前創建情況
Disk /dev/sdb: 214.7 GB, 214748364800 bytes, 419430400 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0xbd1a05e2
Device Boot Start End Blocks Id System
/dev/sdb1 2048 69905066 34951509+ 83 Linux
/dev/sdb2 69906432 419430399 174761984 5 Extended
5、建立邏輯分區(擴展分區建好后,提示輸入n會很智能的顯示是創建邏輯分區,還是主分區)
這里我截個圖吧
Command (m for help): n
Partition type:
p primary (1 primary, 1 extended, 2 free)
l logical (numbered from 5)
Select (default p): l
Adding logical partition 5
First sector (69908480-419430399, default 69908480): 209715199
Last sector, +sectors or +size{K,M,G} (209715199-419430399, default 419430399): 419430399
Partition 5 of type Linux and of size 100 GiB is set
Command (m for help): p
Disk /dev/sdb: 214.7 GB, 214748364800 bytes, 419430400 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0xbd1a05e2
Device Boot Start End Blocks Id System
/dev/sdb1 2048 69905066 34951509+ 83 Linux //主分區
/dev/sdb2 69906432 419430399 174761984 5 Extended //擴展分區
/dev/sdb5 209715199 419430399 104857600+ 83 Linux //sd2的邏輯分區,從一半位置向后設置到末尾
注意:我們從end結束位置可以看出是否是邏輯分區,而sd2和sd5是sd2包含sd5位置。
上面顯示已經建好一個主分區,一個邏輯分區。
6、這些現在還沒有生效,需要保存退出。(只要系統都比較正常,保存退出之后,立即生效的)
Command (m for help): w #保存退出,即生效,
The partition table has been altered!
Calling ioctl() to re-read partition table.
Syncing disks.
截圖如下
7、退出后查看:
[root@fp-web-126 ~]# fdisk -l
Disk /dev/sda: 107.4 GB, 107374182400 bytes, 209715200 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x0006d834
Device Boot Start End Blocks Id System
/dev/sda1 * 2048 1026047 512000 83 Linux
/dev/sda2 1026048 209715199 104344576 8e Linux LVM
......
Disk /dev/sdb: 214.7 GB, 214748364800 bytes, 419430400 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0xbd1a05e2
Device Boot Start End Blocks Id System
/dev/sdb1 2048 69905066 34951509+ 83 Linux
/dev/sdb2 69906432 419430399 174761984 5 Extended
/dev/sdb5 209715199 419430399 104857600+ 83 Linux
.....
其他部分我刪除掉了,只保留這兩個磁盤的相關信息。
8、這時需要給它設置文件系統並進行格式化。
[root@fp-web-126 ~]# mkfs -t ext3
/dev/sdb5
mke2fs 1.42.9 (28-Dec-2013)
Could not stat /dev/sdb1 --- No such file or directory
The device apparently does not exist; did you specify it correctly?
//有時候會出現這種情況,這個需要單獨處理
##出現上面的錯誤,我們重新讀取下分區表
[root@fp-web-126 ~]# partprobe //情況依舊,待日后解決。
正常情況如下:
[root@fp-web-130 ~]# mkfs -t ext3 /dev/sdb5
mke2fs 1.42.9 (28-Dec-2013)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
6553600 inodes, 26214400 blocks
1310720 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=4294967296
800 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
4096000, 7962624, 11239424, 20480000, 23887872
截圖如下
給它設置ext3的文件系統,並格式化。EXT4是更高效高性能的系統,EXT4是Linux系統下的日志文件系統,是EXT3文件系統的后繼版本,ext3目前只支持32000個子目錄,而ext4取消了這一限制,理論上支持無限數量的子目錄,xfs是一個64位文件系統,最大支持8EB減1字節的單個文件系統,對於一個32位Linux系統,文件和文件系統的大小會被限制在16TB
注意:由於126機器上出現異常,所以下面的操作繼續在130機器上進行,過程都一樣,130機器上很順利完成相關操作,肯定是126主機環境有問題了,
執行格式化之前130和126機器都是執行了一樣的,所以我執行過的命令都是在機器130進行了。
9、新建目錄 /mnt/docker/storage (注意這個目錄本身是sda2的第一個分區設置根目錄,所以是把sdb5 掛載到這個目錄下)
掛載這個分區
[root@fp-web-130 ~]# mkdir -p /mnt/docker/storage //循環創建目錄 [root@fp-web-130 ~]# mount /dev/sdb5 /mnt/docker/storage //回車
10、查看是否掛載成功:df -TH /mnt/docker/storage
[root@fp-web-130 ~]# df -TH /mnt/docker/storage
Filesystem Type Size Used Avail Use% Mounted on
/dev/sdb5 ext3 106G 63M 101G 1% /mnt/docker/storage
[root@fp-web-130 ~]# ll /mnt/docker/storage
total 16
drwx------ 2 root root 16384 Feb 5 01:03 lost+found
[root@fp-web-130 ~]# mount -l //也會看到掛載的內容
.......
/dev/sdb5 on /mnt/docker/storage type ext3 (rw,relatime,data=ordered)
測試一下:
[root@fp-web-130 ~]# cd /mnt/docker/storage
[root@fp-web-130 storage]# touch a
[root@fp-web-130 storage]# rm -rf a
這樣就可以正常使用了
查看下掛載情況
11、但是這種方式重啟之后又要手動掛載怎么辦?
這個時候就需要修改 /etc/fstab
# /etc/fstab # Created by anaconda on Mon Oct 24 02:05:13 2016 # # 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 #
/dev/mapper/centos-root / xfs defaults 0 0
UUID=301c75d3-73ce-4342-befa-c8f1f788bcdf /boot xfs defaults 0 0
/dev/mapper/centos-swap swap swap defaults 0 0
/dev/sdb5 /mnt/docker/storage ext3 defaults 0 0
重復以上操作,可以對sdb1等進行掛載
####格式化,在執行掛載
[root@fp-web-130 storage]# mkfs -t ext3 /dev/sdb1
[root@fp-web-130 storage]# mkfs -t ext3 /dev/sdb2
###這里查看下掛載情況
[root@fp-web-130 storage]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/centos-root 96G 15G 82G 15% /
devtmpfs 7.9G 0 7.9G 0% /dev
tmpfs 7.9G 0 7.9G 0% /dev/shm
tmpfs 7.9G 1.1M 7.9G 1% /run
tmpfs 7.9G 0 7.9G 0% /sys/fs/cgroup
/dev/sda1 497M 109M 388M 22% /boot
/dev/dm-4 10G 53M 10G 1% /var/lib/docker/devicemapper/mnt/a4e27f437a05cb697cb7f3e0261124e29a488ce97391744342cd66d890c2ff55
shm 64M 0 64M 0% /var/lib/docker/containers/529add9c408291886a9845f85d0756af1b437ab00f773a167597976fb3652dda/mounts/shm
tmpfs 7.9G 12K 7.9G 1% /var/lib/kubelet/pods/d681bd53-2e90-11e9-bf20-0648b60020df/volumes/kubernetes.io~secret/etcd-certs
tmpfs 7.9G 12K 7.9G 1% /var/lib/kubelet/pods/00b2560f-1cbb-11ea-8086-06ce8e0020dd/volumes/kubernetes.io~secret/default-token-qplmz
tmpfs 7.9G 12K 7.9G 1% /var/lib/kubelet/pods/00d33be1-1cbb-11ea-8086-06ce8e0020dd/volumes/kubernetes.io~secret/fluentd-es-token-spb4t
tmpfs 7.9G 12K 7.9G 1% /var/lib/kubelet/pods/d681bd53-2e90-11e9-bf20-0648b60020df/volumes/kubernetes.io~secret/calico-node-token-bfmqf
tmpfs 7.9G 12K 7.9G 1% /var/lib/kubelet/pods/cf0364ed-1cbb-11ea-8086-06ce8e0020dd/volumes/kubernetes.io~secret/default-token-vrdcz
tmpfs 7.9G 12K 7.9G 1% /var/lib/kubelet/pods/2ffc40ad-27e1-11ea-8086-06ce8e0020dd/volumes/kubernetes.io~secret/default-token-qplmz
10.129.52.227:yfbredis4 197G 42G 148G 22% /var/lib/kubelet/pods/2ffc40ad-27e1-11ea-8086-06ce8e0020dd/volumes/kubernetes.io~glusterfs/storage-redis-4
tmpfs 7.9G 12K 7.9G 1% /var/lib/kubelet/pods/b4c1f5ed-2849-11ea-8086-06ce8e0020dd/volumes/kubernetes.io~secret/default-token-qplmz
/dev/dm-5 10G 34M 10G 1% /var/lib/docker/devicemapper/mnt/a1889e98c57c97a73f6331290ab6a324b2df2e56333836da9763d97377dc3786
shm 64M 0 64M 0% /var/lib/docker/containers/4206127eeb7f3633c63a1712be9ee316812c0fbc0a5e336fcbef65529d7583fc/mounts/shm
/dev/dm-7 10G 34M 10G 1% /var/lib/docker/devicemapper/mnt/53b03fa5e6af732d919c3ddfcb5fa399de31814a74e9cf0ddf8b3abd0c96c398
shm 64M 0 64M 0% /var/lib/docker/containers/034be6522c5aed98e53b353fb8cc299f3c155759b00b159e3433acb39c1836b9/mounts/shm
/dev/dm-8 10G 34M 10G 1% /var/lib/docker/devicemapper/mnt/bc0d3efd0720c1209caf990b9f8cee1de48a05164f6879d567f56fb579008d5c
shm 64M 0 64M 0% /var/lib/docker/containers/090852a3db1672ef7b8c884ecc6603c5e76b23a0430791e7a928c234d14db919/mounts/shm
/dev/dm-9 10G 34M 10G 1% /var/lib/docker/devicemapper/mnt/63c37e149cc24c5004c3a0214d358924deb5bc75364d61e55f5b59735be254e6
shm 64M 0 64M 0% /var/lib/docker/containers/d8234a1dbf96f1a393238cf6e3f9614bad63d84212858be6d57a9706938f694f/mounts/shm
/dev/dm-10 10G 34M 10G 1% /var/lib/docker/devicemapper/mnt/992487c32e7aee7db642e2f0bec2e5582a7e8078c920c2818dfe6e4cdca8d12a
shm 64M 0 64M 0% /var/lib/docker/containers/ca6c0211336bcf39d9202926d76ad6e79c8da8695e6b4290b77b99a40dfd51d0/mounts/shm
/dev/dm-6 10G 99M 9.9G 1% /var/lib/docker/devicemapper/mnt/8d7f8ffa2401c59bdffc00f08c51138f917895462f76d8e9ecec8b5ca21a24d0
/dev/dm-12 10G 34M 10G 1% /var/lib/docker/devicemapper/mnt/6b67665b3abc9ce1c956ad9ca4ce3f5af6af0ac45376c8635fac600249de7246
shm 64M 0 64M 0% /var/lib/docker/containers/a1ebe10c120e343fe934e6feeb12f5ccfeaacc5f734331cfe75f72238f992772/mounts/shm
/dev/dm-13 10G 53M 10G 1% /var/lib/docker/devicemapper/mnt/91f058ef6737db9d7590d1307725b230643ca9b62ab61448cc3f7ca149551994
/dev/dm-15 10G 103M 9.9G 2% /var/lib/docker/devicemapper/mnt/1fb4a9904476bb8d55fc45e70a58fa8bdee6076dedfe3bdd678674ebe27d8799
/dev/dm-16 10G 103M 9.9G 2% /var/lib/docker/devicemapper/mnt/dd60d269f58a0269247e962153862422e50173a9432e72799d3c66bcaf3d7688
/dev/dm-3 10G 299M 9.7G 3% /var/lib/docker/devicemapper/mnt/edbba54df531d54ce62f43155c402a262fb51abfd1984c1ce3a765677fdd6256
shm 64M 0 64M 0% /var/lib/docker/containers/27d7cf33e920ece1725c8d1c59566f13cd504491e900bcfe6df19ebbaf2310dc/mounts/shm
tmpfs 1.6G 0 1.6G 0% /run/user/0
/dev/sdb5 99G 60M 94G 1% /mnt/docker/storage
應用實例:
先保證docker,啟動關閉正常
[root@fp-web-130 storage]# systemctl stop docker
[root@fp-web-130 storage]# systemctl start docker
查看docker配置
[root@fp-web-130 storage]# docker info
....
Data loop file: /var/lib/docker/devicemapper/devicemapper/data
Metadata loop file: /var/lib/docker/devicemapper/devicemapper/metadata
...
Docker Root Dir: /var/lib/docker
....
//停止docker
[root@fp-web-118 mnt]# systemctl stop docker
//文件拷貝或者利用rsync 工具同步
[root@fp-web-118 mnt]#cp -r /var/lib/docker/* /mnt/docker/storage
//修改配置文件
[root@fp-web-118 /]#vi /usr/lib/systemd/system/docker.service
....
ExecStart=/usr/bin/dockerd --data-root /mnt/docker/storage
....
[root@fp-web-118 mnt]# systemctl daemon-reload ##重載配置文件
[root@fp-web-118 mnt]# systemctl start docker
//docker info查看
這里注意/dev/sdb5 是掛載到/mnt/docker/storage ,大小為166G,但是不等於說docker立即能使用全部的166G,我們依然看到Data Space Total 還是107.4GB
所以需要我們更改他的數據池大小默認值和sdb5的大小一致才行。否則大家講講也講不通的。
更改方法見我的另一篇博文:
https://www.cnblogs.com/aozhejin/p/15862394.html
[root@fp-web-130 ~]# cat /etc/redhat-release
CentOS Linux release 7.2.1511 (Core)
[root@fp-web-130 ~]# uname -r
3.10.0-327.el7.x86_64