一、磁盘基本知识

磁盘的基本结构如图

二、什么是磁盘分区、格式化以及磁盘挂载

   磁盘分区:一个完整的磁盘不便于管理,牵一发而动全身,稍有操作不慎,全盘挂掉。所以我们把磁盘划分成小块,每一块都是独立的,我可以在每一个单独的块上任意操作,这个区块就是所谓的分区(partition).

   

   格式化:在磁盘上存储数据,不能任意堆放,需要按一定的规则来存放,就行图书馆的图书一样。所谓这个规则就是文件系统,用于管理数据的存储方式。那么什么是格式化呢,很简单,格式化就是在磁盘上创建文件系统。

   

  挂载:在linux系统中,对任何文件的访问都是从根目录(/)开始,根目录是唯一的入口。那么我们想访问别的磁盘怎么办,唯一的办法就是进入根目录之后去找一个适当的地方“凿一个洞”,通过这个“地道”进入对应的磁盘。那么这个这个“凿洞”的过程就是挂载。

三、实际操作

   第0步,在开始一切工作之前,看看你的电脑上的磁盘情况:

   fdisk -l [设备路径] 查看磁盘情况,如果不加设备路径则是查看电脑中所有硬盘情况。

[root@localhost ~]# fdisk -l /dev/sdbDisk /dev/sdb: 53.7 GB, 53687091200 bytes255 heads, 63 sectors/track, 6527 cylindersUnits = cylinders of 16065 * 512 = 8225280 bytesSector size (logical/physical): 512 bytes / 512 bytesI/O size (minimum/optimal): 512 bytes / 512 bytesDisk identifier: 0xccb363d8   Device Boot      Start         End      Blocks   Id  System[root@localhost ~]#

   这就是我刚刚虚拟的一块新磁盘,用于我们本次试验

   上面返回了这块磁盘的相关信息,比如大小,磁道总数,扇区大小等等。

   最后一行显示磁盘的分区情况,如上图,无内容说明这块磁盘还没有分区。

   第一步:分区,常用的分区工具是 fdisk,这是一个交互式命令。

   fdisk用法:fdisk [option] DEVICE

   在我们平常使用中一般不需要任何选项,直接fdisk + 磁盘

[root@localhost ~]# fdisk /dev/sdbWARNING: 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 然后回车

Command (m for help): mCommand 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):

   好了,fdisk的所有操作都在这里了,我们说说几个常用的命令项

   m:获取帮助,上面已经用过了,就是用于输出当前这个页面

   n:新建一个分区

   p:显示当前磁盘上有的分区表

   q:直接退出,不保存之前的任何操作,所以你可以对这个命令任意折腾,如果有任何失误可以直接退出,无任何损失

  s:更改分区的系统支持类型

  w:保存之前的操作然后退出,所以这个命令小心使用。

   好,我们来完整创建一个分区

   输入n

Command (m for help): nCommand action   e   extended   p   primary partition (1-4)

   这里选择主分区(p)还逻辑分区(e),我们选择主分区(9),选择什么分区根据自己情况而定

pPartition number (1-4):

   这时提示我们输入分区编号,这个编号在1~4之间,视自己情况而定

   我们输入1,然后就是要求输入柱面,这个我们可以 之间回车就好,因为默认就好。然后就要求输入结束柱面,这里注意的是,由于我们对柱面的大小没有概念,所以提供了之间输入分区大小就好,格式:

+size,如+10GPartition number (1-4): 1First cylinder (1-6527, default 1):Using default value 1Last cylinder, +cylinders or +size{K,M,G} (1-6527, default 6527): +10GCommand (m for help):

   这时候分区就差不多了,就差保存退出了,在保存退出之前我可以输入p查看分区表

Command (m for help): pDisk /dev/sdb: 53.7 GB, 53687091200 bytes255 heads, 63 sectors/track, 6527 cylindersUnits = cylinders of 16065 * 512 = 8225280 bytesSector size (logical/physical): 512 bytes / 512 bytesI/O size (minimum/optimal): 512 bytes / 512 bytesDisk identifier: 0xccb363d8   Device Boot      Start         End      Blocks   Id  System/dev/sdb1               1        1306    10490413+  83  LinuxCommand (m for help):

   是不是有一种似曾相识,对,这就是刚刚我fdisk -l看见的内容,在最后一行有我们刚刚建立的分区,但是需要明白的是,这里看见的分区表并不代表分区已经完成了,如果我们这是输入q,之前的操作都是无效的

   好了,我们就直接输入w保存退出

Command (m for help): wThe partition table has been altered!Calling ioctl() to re-read partition table.Syncing disks.[root@localhost ~]#

   提示文字显示分区表已经更改,分区已经成功创建。

   分区创建完成之后还需要注意一些事项:

   分区分区已经创建成功,但是内核并不一定知道,我们需要告诉内核刚刚创建了一个分区

   查看内核识别的分区信息:

   cat /proc/partitions

   

   RHEL5让内核重新读取硬盘分区表:

   partprobe [DEVICE]

   RHEL6让内核重新读取硬盘分区表:

   partx -a [PARTITION] DEVICE

   有些系统创建完分区就能别内核识别,有的不能,而且有的用上面的方法内核还是不能识别分区,需要重启系统。

第二部:格式化

   分区建立好了,但是还不能使用,还得创建文件系统,也就是格式化。

   常用的格式化工具有mkfs,mke2fs

   mkfs可以格式化大多数文件系统,自然也就包含我们常用的ext系列

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

   常用选项有两个:

   -t fstype :指定文件系统类型

   -c :在创建文件系统之前先检查分区是否有坏块

[root@localhost ~]# mkfs -t ext4 /dev/sdb1mke2fs 1.41.12 (17-May-2010)文件系统标签=操作系统:Linux块大小=4096 (log=2)分块大小=4096 (log=2)Stride=0 blocks, Stripe width=0 blocks655776 inodes, 2622603 blocks131130 blocks (5.00%) reserved for the super user第一个数据块=0Maximum filesystem blocks=268854886481 block groups32768 blocks per group, 32768 fragments per group8096 inodes per groupSuperblock backups stored on blocks:32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632正在写入inode表: 完成                          Creating journal (32768 blocks): 完成Writing superblocks and filesystem accounting information: 完成This filesystem will be automatically checked every 21 mounts or180 days, whichever comes first.  Use tune2fs -c or -i to override.[root@localhost ~]#

   有linux中常用的这些命令:

   mkfs.ext2  mkfs.ext3  mkfs.ext4  mkfs.msdos  mkfs.vfat

   这些命令就省去了mkfs的-t选项

   mkfs -t ext2 = mkfs.ext2

   mkfs -t ext3 = mkfs.ext3

   mkfs -t ext4 = mkfs.ext4

   

   mkfs这个命令比较简单实用,但功能不是很丰富,我们来看看mke2fs命令

   我们先来看一下mke2fs的手册

NAME               mke2fs - create an ext2/ext3/ext4 filesystemSYNOPSIS       mke2fs  [  -c | -l filename ] [ -b block-size ] [ -f fragment-size ] [ -g blocks-per-       group ] [ -G number-of-groups ] [ -i bytes-per-inode ] [ -I inode-size ] [ -j ] [  -J       journal-options ] [ -K ] [ -N number-of-inodes ] [ -n ] [ -m reserved-blocks-percent-       age ] [ -o creator-os ] [ -O feature[,...]  ] [ -q ] [ -r fs-revision-level  ]  [  -E       extended-options  ] [ -v ] [ -F ] [ -L volume-label ] [ -M last-mounted-directory ] [       -S ] [ -t fs-type ] [ -T usage-type ] [ -U UUID ] [ -V ] device [ blocks-count ]       mke2fs -O journal_dev [ -b block-size ] [ -L volume-label ] [ -n ] [  -q  ]  [  -v  ]       external-journal [ blocks-count ]

   这个命令就很强大了,主要用于创建ext系列的文件系统,分别看看它的常用选项

  -b :指定磁盘块大小,可选数值:1024,2048,4096

   块大小取决CPU对内存页框大小的支持,x86系统默认页框大小为4K;

  -L label: 设定卷标

  -m :指定预留给管理使用的块所占据总体空间的比例;

   -r :指定预留给管理使用的块的个数;

  -E :设定文件系统的扩展属性;

   举个列子,创建一个ext4文件系统,卷标为myLabel,块大小为2048,给管理员的空间是3%

[root@localhost ~]# mke2fs -t ext4 -b 2048 -L myLabel -m 3 /dev/sdb1mke2fs 1.41.12 (17-May-2010)文件系统标签=myLabel操作系统:Linux块大小=2048 (log=1)分块大小=2048 (log=1)Stride=0 blocks, Stripe width=0 blocks657408 inodes, 5245206 blocks157356 blocks (3.00%) reserved for the super user第一个数据块=0Maximum filesystem blocks=543162368321 block groups16384 blocks per group, 16384 fragments per group2048 inodes per groupSuperblock backups stored on blocks:16384, 49152, 81920, 114688, 147456, 409600, 442368, 802816, 1327104,2048000, 3981312正在写入inode表: 完成                          Creating journal (32768 blocks): 完成Writing superblocks and filesystem accounting information: 完成This filesystem will be automatically checked every 34 mounts or180 days, whichever comes first.  Use tune2fs -c or -i to override.[root@localhost ~]#

   mke2fs相关的还有一个命令就是tune2fs

   这两个命令用法基本相同,一个是用于设置,一个用于修改

   比如mke2fs -m 5:设置给管理员预留5%的空间

   tune2fs -m 3:修改为给管理员3%的空间

  tune2fs 有一个常用的选项是-l,查看文件系统属性

[root@localhost ~]# tune2fs -l /dev/sdb1tune2fs 1.41.12 (17-May-2010)Filesystem volume name:   myLabelLast mounted on:          
Filesystem UUID: 043a1cd6-1067-4243-9063-205d97172860Filesystem magic number: 0xEF53Filesystem revision #: 1 (dynamic)Filesystem features: has_journal ext_attr resize_inode dir_index filetype extent flex_bg sparse_super huge_file uninit_bg dir_nlink extra_isizeFilesystem flags: signed_directory_hashDefault mount options: (none)Filesystem state: cleanErrors behavior: ContinueFilesystem OS type: LinuxInode count: 657408Block count: 5245206Reserved block count: 157356Free blocks: 5123382Free inodes: 657397First block: 0Block size: 2048Fragment size: 2048Reserved GDT blocks: 512Blocks per group: 16384Fragments per group: 16384Inodes per group: 2048Inode blocks per group: 256Flex block group size: 16Filesystem created: Sat Dec 21 14:21:21 2013Last mount time: n/aLast write time: Sat Dec 21 14:21:23 2013Mount count: 0Maximum mount count: 34Last checked: Sat Dec 21 14:21:21 2013Check interval: 15552000 (6 months)Next check after: Thu Jun 19 14:21:21 2014Lifetime writes: 226 MBReserved blocks uid: 0 (user root)Reserved blocks gid: 0 (group root)First inode: 11Inode size: 256Required extra isize: 28Desired extra isize: 28Journal inode: 8Default directory hash: half_md4Directory Hash Seed: d7afa41a-cfa8-40e7-8d39-316ef80c40d0Journal backup: inode blocks[root@localhost ~]#

   格式化就搞定了,接下来就是挂载了

   第三步:挂载

   挂载就太简单了,一切都准备好,‘挂’上去就搞定

   挂载使用mount命令

   mount命令有两个用处,一个挂载分区,另一个是查看已经挂载的分区

   首先我看看已经挂载的分区,mount不加任何选项就是查看已经挂载的分区

[root@localhost ~]# mount/dev/mapper/vg_centos6464-lv_root on / type ext4 (rw)proc on /proc type proc (rw)sysfs on /sys type sysfs (rw)devpts on /dev/pts type devpts (rw,gid=5,mode=620)tmpfs on /dev/shm type tmpfs (rw,rootcontext="system_u:object_r:tmpfs_t:s0")/dev/sda1 on /boot type ext4 (rw)none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)sunrpc on /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw)[root@localhost ~]#

   第二个就是将刚刚的分区挂载到我们的系统上

   mount [option] DEVICE MOUNT_POINT

   一般情况不需要指定选项,直接将指定设备挂到挂载点上

[root@localhost ~]# mount /dev/sdb1 /data[root@localhost ~]# ls /datalost+found[root@localhost ~]#

   挂载完毕,现在就可以正常使用这个分区了

   但是这样的挂载是临时的,当我们重启系统后,这个分区有‘丢’

   如果要让系统每次重启自动挂载就需要编辑/etc/fstab文件

   

   这个文件的编辑规则如下

   1:指定设备,可以是路径,也可以是UUID

   2:指定挂载点

   3:指定文件系统类型

   4:指定挂载属性,如果不需要添加额外的属性就是default,有额外的属性就在default后写属性,用逗号分隔

   5:转储频率:

       0: 从不备份;

       1:每日备份;

   

   6:自检次序:

       0:不检测;

       1:第一个检测;一般只有根文件系统被第一个检测;

       2:第二个自检

          ......

   说完挂载,再来说说卸载,卸载比挂载还简单

   umount + 设备 或者 umount + 挂载点

   需要注意的是,不管当前是否已经占用挂载点,都可以挂载

   但是,如果当前已经占用挂载目录,就不能卸载该分区

   好了,关于磁盘的分区、格式化和挂载就简单说到这来,mke2fs和tune2fs还有很多选项没有想象阐述,请仔细查看man手册。