磁盘管理命令

Linux有着管理各种存储设备的强大能力。Linux把所有磁盘都当作文件管理,从而简化我们对其进行的读写等操作。
每个硬盘的分区命名:
IDE硬盘(以/dev/hda为例)为:
/dev/hda1
/dev/hda2
/dev/hda3

SATA或其他硬盘(以/dev/sda为例)为:
    /dev/sda1
    /dev/sda2
    /dev/sda3

磁盘属于块设备,我们可以使用ls命令查看下服务器上所有已安装的磁盘:

1
2
3
4
5
6
[root@linux ~]# ls -l /dev | grep "[[:space:]][h|s]" | grep "^b"
brw-rw----. 1 root disk 8, 0 Dec 3 11:10 sda
brw-rw----. 1 root disk 8, 1 Dec 3 11:10 sda1
brw-rw----. 1 root disk 8, 2 Dec 3 11:10 sda2
brw-rw----. 1 root disk 8, 16 Dec 3 11:10 sdb
brw-rw----. 1 root cdrom 11, 0 Dec 3 11:10 sr0

注:命令中的两个grep命令用来过滤出磁盘所在的行。

说到分区,我们不得不提下MBR,MBR是mater boot recoder的简写,其存在于硬盘的0磁道0扇区,占据512B的空间(每个扇区也就512B),这512B的空间又细分如下:
446B:存放boot loader,几开机引导程序;
64B:存放分区信息,每条分区信息占16B的空间,所以其最多存储4条分区信息,
所以每个硬盘最多能分出4个主分区或3个主分区加一个扩展分区;
剩下的2B空间:是此MBR的有效性标识。

通过上面的信息我们知道每个硬盘最多能分出4个主分区或3个主分区加一个扩展分区,那是不是每个硬盘最多只能分4个分区呢?
非也,我们可以在这四个分区中留出一个做为扩展分区,扩展分区又可以细分出多个逻辑分区。扩展分区中的逻辑分区编号只能从5开始,比如我有一块硬盘,划分出2个主分区和1个扩展分区(主分区+扩展分区数量不能超过4个),扩展分区下又有两个逻辑分区,其变号为:

1
2
3
4
5
6
Device Boot Start End Blocks Id System
/dev/sdb1 1 262 2104483+ 83 Linux
/dev/sdb2 263 524 2104515 83 Linux
/dev/sdb3 525 1830 10490445 5 Extended
/dev/sdb5 525 1178 5253223+ 83 Linux
/dev/sdb6 1179 1830 5237158+ 83 Linux

但是分区是怎么划分出来的呢?
是通过fdisk命令:
使用方法:fdisk /dev/DEVICE_NAME 或者 fdisk -l
直接在shell中输入fdisk -l只会把所有的硬盘和分区信息输出到屏幕,可以自行测试。
对于fdisk /dev/DEVICE
如:

1
[root@linux ~]# fdisk /dev/sdb

会进入/dev/sdb的操作界面,直接在提示符处输入对应的命令按提示操作即可,当不知道怎么操作时可以输入m查看帮助:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
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)

常用的输入:
p: 显示已有分区
n: 创建
d: 删除
w: 保存
q: 退出
l: 列出可用的分区类型,类型很重要,比如swap只能用82类型的分区;
创建一个分区:

1
2
3
4
5
6
7
8
9
Command (m for help): n <---n表示创建新分区
Command action
e extended
p primary partition (1-4)
p <---表示创建主分区,e表示创建扩展分区
Partition number (1-4): 1 <---输入主分区号,第一个则输入1
First cylinder (1-2610, default 1): <---输入分区开始的磁柱,直接回车按默认即可
Using default value 1
Last cylinder, +cylinders or +size{K,M,G} (1-2610, default 2610): +2G <---输入结束的磁柱,也可输入大小,比+2G或者+2000M。回车即创建完成。

创建扩展分区与创建主分区步骤相同;

在扩展分区下创建一个逻辑分区:

1
2
3
4
5
6
7
8
Command (m for help): n
Command action
l logical (5 or over) <---注意逻辑分区号是从5开始的。
p primary partition (1-4)
l <---l(L的小写)表示逻辑分区
First cylinder (525-1830, default 525):
Using default value 525
Last cylinder, +cylinders or +size{K,M,G} (525-1830, default 1830): +5G

创建逻辑分区与创建主分区过程基本相同,只是创建逻辑分区不需要输入分区号。
切记,操作完成退出前别忘了输入w执行保存分区信息,否则分区失败,也就是没有分区;
最后输入q,退出fdisk命令。
更多fdisk用法请自行man。

分区完成可以在shell中使用 fdisk -l 查看或者 cat /proc/partitions 查看。
若 cat /proc/partitions 后没有显示新建的分区,可以使用partx命令让内核重新读取分区信息:
partx -a /dev/sdb;
-a表示add;
更多partx用法请自行man。

创建分区后还是不能立即使用的,因为还要通过格式化和挂载才能使用,我们就先来看下怎么格式化分区吧;
格式化就是把分区格式化成特定的文件系统;
Linux支持的文件系统有:ext2, ext3, ext4, xfs, btrfs, reiserfs, jfs, swap;
其中ext2和VFAT为非日志文件系统,其余全部为日志文件系统;日志文件系统较为先进,稳定性较好。
还有两个特殊的:
swap内存交换分区,用于存放内存交换页面文件;
Linux的虚拟文件系统: VFS,用于虚拟所有的文件系统,给用户提供统一的接口。
为什么需要文件系统呢?
文件系统是为方便操作系统对分区的管理而对空间进行的一系列规划整理,打个比方,你要做一个书架,你是不是要好好的划分下书架的空间以便于更好管理书架并放置更多的书呢?
ext系列文件系统在分区中是以如下方式组织分区空间的:

格式化分区的具体命令有mkfs,mke2fs,用法如下:

1. mkfs.FS_TYPE OPTION DEVICE 或者 mkfs -t FS_TYPE DEVICE
                有用OPTION:
                        -L 'LABEL' 添加lable
                注:FS_TYPE为ext2, ext3, ext4, xfs, btrfs, reiserfs, jfs, swap等文件系统名称。

2. mke2fs OPTION DEVICE_NAME,DEVICE_NAME指分区名称
        OPTION:
            -t {ext2|ext3|ext4}
            -b {1024|2048|4096} 设置存储基本单元block的大小
            -L 'LABLE' 用于设置分区的LABEL
            -j 相当于-t ext3, 即使用日志功能
            -i #: 为数据空间中每多少个字节创建一个inode, 此大小不应该小于block的大小,
                            否则inode的数量将比block还多。。。。。。
            -N #: 为数据空间创建多少个inode
            -m #: 为管理人员预留的空间占据的百分比. 默认是5, 即5%
            -O FEATURE[,…] 启用指定特性
            -O ^FEATURE[,…] 关闭指定特性
            注:mkfs.ext3 = mkfs -t ext3 = mke2fs -j = mke2fs -t ext3

其他常用命令:

1. blkid 分区: 显示分区信息
    或者:
    blkid -U UUID 根据UUID查找设备
    blkid -L LABEL 根据LABEL查找设备

2. e2lable DEVICE [LABEL],查看或设定LABEL
3. tune2fs OPTION DEVICE_NAME: 重新设定ext系统文件系统可调整参数的值
    OPTION:
        -l 查看超级块信息
        -L 'LABEL' 设定LABEL
        -m # 修改预留给管理人员的空间百分比
        -j: 打开日志功能, 将ext2 升级为ext3
        -O 文件系统属性启用或禁用
        -o 指定默认挂载选项
4. dumpe2fs OPTION DEVICE_NAME: 输出DEVICE的信息
    OPTION:
        -h: 查看超级块信息
5. mkswap: 创建交换空间
    用法:mkswap [OPTION] DEVICE
    注意:前提调整DEVICE类型为82,可用类型可以通过fdisk DEVICE然后输入l查看。

文件系统监测与修复命令:
1.fsck: file system check的简写,用法如下:
fsck.FS_TYPE 或 fsck -t FS_TYPE
FS_TYPE 一定要与分区实际的文件系统类型对应
OPTION:
-a 自动修改错误
-r 交互式修复错误
e2fsck: ext系列文件系统专用
-y 自动回答为yes
-f 强制修复