您的位置:首页 > 运维架构 > Linux

Linux磁盘分区、格式化和挂载

2013-12-21 15:20 573 查看
一、磁盘基本知识
磁盘的基本结构如图






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

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

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

挂载:在linux系统中,对任何文件的访问都是从根目录(/)开始,根目录是唯一的入口。那么我们想访问别的磁盘怎么办,唯一的办法就是进入根目录之后去找一个适当的地方“凿一个洞”,通过这个“地道”进入对应的磁盘。那么这个这个“凿洞”的过程就是挂载。
三、实际操作
第0步,在开始一切工作之前,看看你的电脑上的磁盘情况:
fdisk -l [设备路径] 查看磁盘情况,如果不加设备路径则是查看电脑中所有硬盘情况。

[root@localhost ~]# fdisk -l /dev/sdb
Disk /dev/sdb: 53.7 GB, 53687091200 bytes
255 heads, 63 sectors/track, 6527 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0xccb363d8
Device Boot      Start         End      Blocks   Id  System
[root@localhost ~]#
这就是我刚刚虚拟的一块新磁盘,用于我们本次试验

上面返回了这块磁盘的相关信息,比如大小,磁道总数,扇区大小等等。
最后一行显示磁盘的分区情况,如上图,无内容说明这块磁盘还没有分区。
第一步:分区,常用的分区工具是 fdisk,这是一个交互式命令。
fdisk用法:fdisk [option] DEVICE
在我们平常使用中一般不需要任何选项,直接fdisk + 磁盘

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

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


好了,fdisk的所有操作都在这里了,我们说说几个常用的命令项
m:获取帮助,上面已经用过了,就是用于输出当前这个页面
n:新建一个分区
p:显示当前磁盘上有的分区表
q:直接退出,不保存之前的任何操作,所以你可以对这个命令任意折腾,如果有任何失误可以直接退出,无任何损失
s:更改分区的系统支持类型
w:保存之前的操作然后退出,所以这个命令小心使用。
好,我们来完整创建一个分区
输入n

Command (m for help): n
Command action
e   extended
p   primary partition (1-4)
这里选择主分区(p)还逻辑分区(e),我们选择主分区(9),选择什么分区根据自己情况而定

p
Partition number (1-4):
这时提示我们输入分区编号,这个编号在1~4之间,视自己情况而定
我们输入1,然后就是要求输入柱面,这个我们可以 之间回车就好,因为默认就好。然后就要求输入结束柱面,这里注意的是,由于我们对柱面的大小没有概念,所以提供了之间输入分区大小就好,格式:
+size,如+10G
Partition number (1-4): 1
First cylinder (1-6527, default 1):
Using default value 1
Last cylinder, +cylinders or +size{K,M,G} (1-6527, default 6527): +10G
Command (m for help):
这时候分区就差不多了,就差保存退出了,在保存退出之前我可以输入p查看分区表

Command (m for help): p
Disk /dev/sdb: 53.7 GB, 53687091200 bytes
255 heads, 63 sectors/track, 6527 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0xccb363d8
Device Boot      Start         End      Blocks   Id  System
/dev/sdb1               1        1306    10490413+  83  Linux
Command (m for help):
是不是有一种似曾相识,对,这就是刚刚我fdisk -l看见的内容,在最后一行有我们刚刚建立的分区,但是需要明白的是,这里看见的分区表并不代表分区已经完成了,如果我们这是输入q,之前的操作都是无效的
好了,我们就直接输入w保存退出

Command (m for help): w
The 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/sdb1
mke2fs 1.41.12 (17-May-2010)
文件系统标签=
操作系统:Linux
块大小=4096 (log=2)
分块大小=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
655776 inodes, 2622603 blocks
131130 blocks (5.00%) reserved for the super user
第一个数据块=0
Maximum filesystem blocks=2688548864
81 block groups
32768 blocks per group, 32768 fragments per group
8096 inodes per group
Superblock 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 or
180 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 filesystem
SYNOPSIS
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/sdb1
mke2fs 1.41.12 (17-May-2010)
文件系统标签=myLabel
操作系统:Linux
块大小=2048 (log=1)
分块大小=2048 (log=1)
Stride=0 blocks, Stripe width=0 blocks
657408 inodes, 5245206 blocks
157356 blocks (3.00%) reserved for the super user
第一个数据块=0
Maximum filesystem blocks=543162368
321 block groups
16384 blocks per group, 16384 fragments per group
2048 inodes per group
Superblock 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 or
180 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/sdb1
tune2fs 1.41.12 (17-May-2010)
Filesystem volume name:   myLabel
Last mounted on:          <not available>
Filesystem UUID:          043a1cd6-1067-4243-9063-205d97172860
Filesystem magic number:  0xEF53
Filesystem 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_isize
Filesystem flags:         signed_directory_hash
Default mount options:    (none)
Filesystem state:         clean
Errors behavior:          Continue
Filesystem OS type:       Linux
Inode count:              657408
Block count:              5245206
Reserved block count:     157356
Free blocks:              5123382
Free inodes:              657397
First block:              0
Block size:               2048
Fragment size:            2048
Reserved GDT blocks:      512
Blocks per group:         16384
Fragments per group:      16384
Inodes per group:         2048
Inode blocks per group:   256
Flex block group size:    16
Filesystem created:       Sat Dec 21 14:21:21 2013
Last mount time:          n/a
Last write time:          Sat Dec 21 14:21:23 2013
Mount count:              0
Maximum mount count:      34
Last checked:             Sat Dec 21 14:21:21 2013
Check interval:           15552000 (6 months)
Next check after:         Thu Jun 19 14:21:21 2014
Lifetime writes:          226 MB
Reserved blocks uid:      0 (user root)
Reserved blocks gid:      0 (group root)
First inode:              11
Inode size:          256
Required extra isize:     28
Desired extra isize:      28
Journal inode:            8
Default directory hash:   half_md4
Directory Hash Seed:      d7afa41a-cfa8-40e7-8d39-316ef80c40d0
Journal 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 /data
lost+found
[root@localhost ~]#
挂载完毕,现在就可以正常使用这个分区了
但是这样的挂载是临时的,当我们重启系统后,这个分区有‘丢’
如果要让系统每次重启自动挂载就需要编辑/etc/fstab文件



这个文件的编辑规则如下
1:指定设备,可以是路径,也可以是UUID
2:指定挂载点
3:指定文件系统类型
4:指定挂载属性,如果不需要添加额外的属性就是default,有额外的属性就在default后写属性,用逗号分隔
5:转储频率:
0: 从不备份;
1:每日备份;

6:自检次序:
0:不检测;
1:第一个检测;一般只有根文件系统被第一个检测;
2:第二个自检
......

说完挂载,再来说说卸载,卸载比挂载还简单
umount + 设备 或者 umount + 挂载点
需要注意的是,不管当前是否已经占用挂载点,都可以挂载
但是,如果当前已经占用挂载目录,就不能卸载该分区

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

本文出自 “花满楼” 博客,请务必保留此出处http://becaning.blog.51cto.com/7548193/1343507
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: