在日常的服务器管理维护过程中,每天都要和磁盘进行亲密接触。那几天就来谈一谈CentOS下的磁盘管理机制。
20年前,一个60MB的磁盘大概需要花费$1000,而现如今,一块1TB的硬盘则大概需要$80。由此可见,磁盘这种东西已经很亲民了。但是作为计算机中不可或缺的一部分,磁盘扮演着很重要的角色。现在市面上常见的硬盘分为两种,机械盘和固态盘。
对于这两种盘想必大家都有着比我更加深入的了解。当然,固态盘对于我这种学生党来说也算是奢侈品了。今天主要来看看传统的机械盘。
以当前市面上最流行的SATA盘来说吧。
linux会自动识别block设备,并且自动在/dev目录下创建一个设备文件,以供内核能够访问到该设备。通常SATA的命名规则是/dev/sda、/dve/sdb等(发现的第一块设备就是/dev/sda,第二块就是/dev/sdb….)。使用fidsk -l 或者parted -l 可以列出当前系统上已经识别的block设备的个数(包括usb设备)。
接着来看看磁盘的底层管理
格式化和坏块管理:
安全格式化:要是确定一块数据盘要格式化,而且不打算恢复可以使用dd命令来进行格式化:
假设我有一块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 <硬盘写速度参照> 这个命令同样也可以测试硬盘的读写速度<上面的操作可以当做写速度的参照> 读速度测试: #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监视磁盘(self-monitoring,analysis,and reporting technology)
在RED-HAT系列系统上都预装了此应用程序,通常由smartd守护进程和smartctl管理工具两部分。而/etc/smartd.conf定义了其后台进程的工作方式。
分区和格式化:
通常一个刚买的硬盘需要自己手动格式化分区,那么在CentOS命令行中该如何操作呢。
首先来看看有关分区的基础知识:
在许多允许有分区的系统上,通常会在磁盘的起始的第一个磁盘块上有一个“记录”,这个记录标明了分区的范围。通常这个磁盘快被叫做MBR(Master Boot Record)主引导记录。但是这个“主引导记录”占据的磁盘块只有512字节,而前446个字节被一个叫(BootLoader)的家伙占据了,只有66字节,最后两个字节还要用来标识BootLoader是否生效,所以留给磁盘分区的就只有64字节了。而一个分区表要占16字节,所以这64字节最多只能分4张分区表,因此最多只能有四个主分区。那我就是想分五个区呢?就很难受了啊。所以,人们就提出了拓展分区的概念,将一个主分区表作为拓展分区,而这个拓展分区上只存放一些列的分区指针,那么分区就可以不受4的限制了。
可以看到,当我们使用扩展分区时,已经突破了4个分区的限制,在CentOS中拓展分区不能直接使用,必须要在拓展分区上再创建逻辑分区,才能够使用,而且,拓展分区是要占用一个编号的(即图中的/dev/sda4)所以在分区时应该格外注意。
好了,来创建一个分区吧:
#fdisk /dev/sda 使用fdisk命令 指明要给那一块磁盘创建分区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 创建一个新分区 Partition type: p primary (0 primary, 0 extended, 4 free) e extended Select (default p): p 指明这个分区为主分区 Partition number (1-4, default 1): 指定分区编号,默认为1 First sector (2048-16777215, default 2048): 指定开始的扇区,使用默认即可 Using default value 2048 Last sector, +sectors or +size{K,M,G} (2048-16777215, default 16777215): +4G 创建分区的大小 Partition 1 of type Linux and of size 4 GiB is set Command (m for help): w 保存退出
创建好分区之后,还要创建对应的文件系统:
[root@localhost ~]# mkfs -t ext4 -j /dev/sdb1 创建ext4文件系统 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中创建文件试试吧 #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
到此一个主分区就创建完成了。创建逻辑分区的方法与之类似,但是一定要注意fdisk最多只能识别15个分区,要是分区大于15个,fdisk命令就不好用了。针对于此,有一个很好用的命令parted/gparted(这两货其实是一个工具,只不过一个是命令行工具,一个是xWindow桌面工具)。