在日常的服務(wù)器管理維護過程中,每天都要和磁盤進行親密接觸。那幾天就來談一談CentOS下的磁盤管理機制。
20年前,一個60MB的磁盤大概需要花費$1000,而現(xiàn)如今,一塊1TB的硬盤則大概需要$80。由此可見,磁盤這種東西已經(jīng)很親民了。但是作為計算機中不可或缺的一部分,磁盤扮演著很重要的角色?,F(xiàn)在市面上常見的硬盤分為兩種,機械盤和固態(tài)盤。
對于這兩種盤想必大家都有著比我更加深入的了解。當(dāng)然,固態(tài)盤對于我這種學(xué)生黨來說也算是奢侈品了。今天主要來看看傳統(tǒng)的機械盤。
以當(dāng)前市面上最流行的SATA盤來說吧。
linux會自動識別block設(shè)備,并且自動在/dev目錄下創(chuàng)建一個設(shè)備文件,以供內(nèi)核能夠訪問到該設(shè)備。通常SATA的命名規(guī)則是/dev/sda、/dve/sdb等(發(fā)現(xiàn)的第一塊設(shè)備就是/dev/sda,第二塊就是/dev/sdb….)。使用fidsk -l 或者parted -l 可以列出當(dāng)前系統(tǒng)上已經(jīng)識別的block設(shè)備的個數(shù)(包括usb設(shè)備)。
接著來看看磁盤的底層管理
格式化和壞塊管理:
安全格式化:要是確定一塊數(shù)據(jù)盤要格式化,而且不打算恢復(fù)可以使用dd命令來進行格式化:
假設(shè)我有一塊4GB的磁盤需要進行徹底的格式化: #dd if=/dev/zero of=/dev/your_device bs=1M count=4096 4096+0 records in 4096+0 records out 4294967296 bytes (4.3 GB) copied, 6.1207 s, 702 MB/s <硬盤寫速度參照> 這個命令同樣也可以測試硬盤的讀寫速度<上面的操作可以當(dāng)做寫速度的參照> 讀速度測試: #dd if=/dev/your_device of=/dev/null bs=1M count=4096 4096+0 records in 4096+0 records out 4294967296 bytes (4.3 GB) copied, 4.59378 s, 935 MB/s <這個可以作為讀速度的參照>
用SMART監(jiān)視磁盤(self-monitoring,analysis,and reporting technology)
在RED-HAT系列系統(tǒng)上都預(yù)裝了此應(yīng)用程序,通常由smartd守護進程和smartctl管理工具兩部分。而/etc/smartd.conf定義了其后臺進程的工作方式。
分區(qū)和格式化:
通常一個剛買的硬盤需要自己手動格式化分區(qū),那么在CentOS命令行中該如何操作呢。
首先來看看有關(guān)分區(qū)的基礎(chǔ)知識:
在許多允許有分區(qū)的系統(tǒng)上,通常會在磁盤的起始的第一個磁盤塊上有一個“記錄”,這個記錄標(biāo)明了分區(qū)的范圍。通常這個磁盤快被叫做MBR(Master Boot Record)主引導(dǎo)記錄。但是這個“主引導(dǎo)記錄”占據(jù)的磁盤塊只有512字節(jié),而前446個字節(jié)被一個叫(BootLoader)的家伙占據(jù)了,只有66字節(jié),最后兩個字節(jié)還要用來標(biāo)識BootLoader是否生效,所以留給磁盤分區(qū)的就只有64字節(jié)了。而一個分區(qū)表要占16字節(jié),所以這64字節(jié)最多只能分4張分區(qū)表,因此最多只能有四個主分區(qū)。那我就是想分五個區(qū)呢?就很難受了啊。所以,人們就提出了拓展分區(qū)的概念,將一個主分區(qū)表作為拓展分區(qū),而這個拓展分區(qū)上只存放一些列的分區(qū)指針,那么分區(qū)就可以不受4的限制了。
可以看到,當(dāng)我們使用擴展分區(qū)時,已經(jīng)突破了4個分區(qū)的限制,在CentOS中拓展分區(qū)不能直接使用,必須要在拓展分區(qū)上再創(chuàng)建邏輯分區(qū),才能夠使用,而且,拓展分區(qū)是要占用一個編號的(即圖中的/dev/sda4)所以在分區(qū)時應(yīng)該格外注意。
好了,來創(chuàng)建一個分區(qū)吧:
#fdisk /dev/sda 使用fdisk命令 指明要給那一塊磁盤創(chuàng)建分區(qū)Welcome to fdisk (util-linux 2.23.2). Changes will remain in memory only, until you decide to write them. Be careful before using the write command. Device does not contain a recognized partition table Building a new DOS disklabel with disk identifier 0x051a34dd. Command (m for help): n 創(chuàng)建一個新分區(qū) Partition type: p primary (0 primary, 0 extended, 4 free) e extended Select (default p): p 指明這個分區(qū)為主分區(qū) Partition number (1-4, default 1): 指定分區(qū)編號,默認(rèn)為1 First sector (2048-16777215, default 2048): 指定開始的扇區(qū),使用默認(rèn)即可 Using default value 2048 Last sector, +sectors or +size{K,M,G} (2048-16777215, default 16777215): +4G 創(chuàng)建分區(qū)的大小 Partition 1 of type Linux and of size 4 GiB is set Command (m for help): w 保存退出
創(chuàng)建好分區(qū)之后,還要創(chuàng)建對應(yīng)的文件系統(tǒng):
[root@localhost ~]# mkfs -t ext4 -j /dev/sdb1 創(chuàng)建ext4文件系統(tǒng) 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 262144 inodes, 1048576 blocks 52428 blocks (5.00%) reserved for the super user First data block=0 Maximum filesystem blocks=1073741824 32 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 Allocating group tables: done Writing inode tables: done Creating journal (32768 blocks): done Writing superblocks and filesystem accounting information: done
最后掛載就可以使用了:
#mount /dev/sdb1 /mnt/test_file_system/ 進入test_file_system中創(chuàng)建文件試試吧 #cd /mnt/test_file_system #touch test.sh #ls -l total 76 -rw-------. 1 root root 1422 Sep 11 10:08 anaconda-ks.cfg -rw-r--r--. 1 root root 71826 Sep 13 08:39 smartd.conf -rw-r--r--. 1 root root 0 Sep 13 09:30 test.sh
到此一個主分區(qū)就創(chuàng)建完成了。創(chuàng)建邏輯分區(qū)的方法與之類似,但是一定要注意fdisk最多只能識別15個分區(qū),要是分區(qū)大于15個,fdisk命令就不好用了。針對于此,有一個很好用的命令parted/gparted(這兩貨其實是一個工具,只不過一個是命令行工具,一個是xWindow桌面工具)。