本文主要介绍分区基本知识, 文件系统常用命令, 如何给一块新硬盘使用fdisk
进行分区, 格式化并且自动挂载, 如果将新的分区加入到swap等
一. 分区和文件系统
一块新的硬盘想要使用, 首先要对其进行分区, 然后在对各个分区进行格式化, 格式化也就是写入文件系统
1. 分区类型
一块硬盘可以划分为以下三个分区
主分区: 总共最多只能有四个
扩展分区: 只能有一个, 也算作主分区的一种, 也就是说主分区加扩展分区只能有四个, 但是扩展分区划分逻辑分区后才能使用, 不能对扩展分区进行格式化
逻辑分区: 逻辑分区是在扩展分区基础上划分, 如果是IDE硬盘, 最多支持59个逻辑分区, SCSI硬盘支持11个逻辑分区
分区设备文件名
分区名 | 设备文件名 |
---|---|
主分区1 | /dev/sda1(第一块硬盘的第一个主分区) |
主分区2 | /dev/sda2(第一块硬盘的第二个主分区) |
扩展分区 | /dev/sda4(第一块硬盘扩展分区) |
逻辑分区1 | /dev/sda5(第一块硬盘的第一个逻辑分区, 只能从5开始) |
逻辑分区2 | /dev/sda6(第一块硬盘的第一个逻辑分区) |
2. 文件系统
- ext2: ext文件升级版本, 最大支持16TB的分区和2TB的文件
- ext3: 支持分区和文件大小不变, 但是最大的区别是带日志功能
- ext4: ext3升级版本, ext4在性能, 伸缩性, 和可靠性做了大量改进, 最大支持1EB分区和16TB单个文件, 无限数量子目录, 1EB=1024PB=1024*1024TB
二. 文件系统常用命令
1. df, du, fsck, dump2fs
-
df [选项] [挂载点]
- -a: 显示所有的文件系统信息, 包括特殊文件系统, 如/proc, /sysfs
- -h: 易读方式显示
- -T: 显示文件系统类型
- -m: 以MB显示
- -k: 以kB显示(默认)
-
du [选项] [目录或文件名]
- -a: 显示每个子文件的磁盘占用量, 默认只统计子目录的磁盘占用量
- -h: 易读方式展示
- -s: 统计总占用量, 而不列出子目录和子文件的占用量
[root@localhost /]# du -sh /etc
26M /etc
-
df和du的区别:
- df命令时从文件系统考虑的, 不光要考虑文件占用的空间, 还要统计被命令或程序占用的空间(如文件被删除, 但是没有释放, 需要重启)
- du命令时面向文件的, 只会计算文件或目录占用的空间
-
文件系统修复命令fsck
fsck [选项]分区设备文件名- -a: 不用显示用户提示
- -y: 自动修复, 和-a作用一致
显示磁盘状态命令dumpe2fs
dumpe2fs 分区设备文件名
dumpe2fs /dev/sda1
[root@localhost /]# dumpe2fs /dev/sda1 | more
dumpe2fs 1.41.12 (17-May-2010)
Filesystem volume name: <none>
Last mounted on: /boot
Filesystem UUID: 9f22d879-291d-42b6-89ab-2dda6c5a65d2
Default mount options: user_xattr acl
Filesystem state: clean
Errors behavior: Continue
Filesystem OS type: Linux
Inode count: 128016
Block count: 512000
Reserved block count: 25600
Free blocks: 462374
Free inodes: 127978
2. 挂载命令
- 查询挂载情况
mount [-l]
- 依据配置文件/etc/fstab的内容, 自动挂载
mount -a
- 挂载命令mount
mount [-t 文件系统][-L 卷标名][-o 特殊选项]设备文件名 挂载点- -t 文件系统: 加入文件系统类型类指定挂载的类型, 可以以ext3, ext4, iso9660, vfat等文件系统
- -L 卷标名: 挂载指定卷标的分区, 而不是安装设备文件名挂载
- -o 特殊选项: 可以指定挂载的额外选项 多个逗号分隔, 如:
mount -o remount,noexec /home
, 重新挂载/home分区, 设置/home分区的文件不可执行
- -o 支持的特殊选项很多, 但只是对分区做设置
参数 | 说明 |
---|---|
remount | 重新挂载已经挂载的文件系统 |
exec/noexec | 执行/不执行, 设定是否允许在文件系统中执行可执行文件, 默认exec |
rw/ro | 读写/制度, 挂载时, 是否具有读写权限, 默认rw |
3. 挂载光盘和U盘
- 挂载光盘
# 创建光盘挂载点
[root@localhost /]# mkdir /media/cdrom
# 将光盘挂载在/media/cdrom挂载点, iso9660可以不填
[root@localhost /]# mount -t iso9660 /dev/sr0 /media/cdrom/
mount: block device /dev/sr0 is write-protected, mounting read-only
# 卸载光盘
[root@localhost /]# umount /media/cdrom/
- 挂载U盘
U盘文件格式需要是fat16或者fat32, linux默认不支持NTFS文件系统- 执行fdisk -l查看
Device Boot Start End Blocks Id System
/dev/sda1 * 1 64 512000 83 Linux
Partition 1 does not end on cylinder boundary.
/dev/sda2 64 2611 20458496 8e Linux LVM
如果是虚拟机安装 需要切换到终端, 插入u盘, 虚拟机默认会识别u盘
, 如果不切到终端, 插入u盘, 就是windows系统识别
fdisk -l, 查找分区, 可以看出u盘被识别为/dev/sdb4
Device Boot Start End Blocks Id System
/dev/sdb4 * 1 1883 15120256 c W95 FAT32 (LBA)
挂载u盘
[root@localhost /]# mkdir /media/usb
# 指定挂载文件系统类型
[root@localhost /]# mount -t vfat /dev/sdb4 /media/usb
[root@localhost /]# ls /media/usb
[root@localhost /]# umount /media/usb
4. 支持NTFS文件系统
- 下载NTFS-3G
- ./configure && make && meke install
- 安装以后, 也是进入终端, 插入移动硬盘, 让linux识别硬盘
- 执行fdisk -l查看分区设备
- 执行 mount -t ntfs-3g 分区设备文件名 挂载点
mount -t ntfs-3g /dev/sdb1
三. fdisk分区
新插入一块硬盘, 如何给一块新的硬盘分区并且挂载呢?
- 在虚拟机中增加硬盘, 关机后, 在虚拟机设置中添加一块硬盘
- 开机后, 查看新增加的硬盘/dev/sdb,
fdisk -l
Disk /dev/sdb: 10.7 GB, 10737418240 bytes
255 heads, 63 sectors/track, 1305 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
1. 使用fdisk进行分区
- 执行
fdisk /etc/sdb
, 会进入fdisk分区交互界面
Command (m for help):
- fdisk交互指令说明如下:
- a: 设置可引导标记
- b: 编辑bsd磁盘标签
- d: 删除一个分区
- l: 显示一直文件系统类型, 82为Linux swap分区, 83为Linux分区
- m: 显示帮助菜单
- n: 新建分区(重要)
- p: 显示分区列表
- t: 改变一个分区的系统ID
- u: 改变显示记录单位
- v: 验证分区表
- w: 退出保存
- q: 退出不保存
- 新建主分区, 扩展分区, 逻辑分区
Command (m for help): n
Command action
e extended
p primary partition (1-4)
# 新建主分区
p
# 选择分区号
Partition number (1-4): 1
# 选择起始柱面
First cylinder (1-1305, default 1):
Using default value 1
#选择结束柱面
Last cylinder, +cylinders or +size{K,M,G} (1-1305, default 1305): +2G
Command (m for help): p
...
Device Boot Start End Blocks Id System
/dev/sdb1 1 262 2104483+ 83 Linux
## 新建扩展分区
Command (m for help): n
Command action
e extended
p primary partition (1-4)
e
Partition number (1-4): 4
First cylinder (263-1305, default 263):
Using default value 263
Last cylinder, +cylinders or +size{K,M,G} (263-1305, default 1305): +2G
# 可以看到主分区和扩展分区
Command (m for help): p
Device Boot Start End Blocks Id System
/dev/sdb1 1 262 2104483+ 83 Linux
/dev/sdb4 263 524 2104515 5 Extended
## 在扩展分区上新建逻辑分区, 可以看到l logical逻辑分区选项
Command (m for help): n
Command action
l logical (5 or over)
p primary partition (1-4)
l
First cylinder (263-524, default 263):
Using default value 263
Last cylinder, +cylinders or +size{K,M,G} (263-524, default 524): +2G
Command (m for help): p
#可以看到一个主分区, 一个扩展分区和一个逻辑分区
Device Boot Start End Blocks Id System
/dev/sdb1 1 262 2104483+ 83 Linux
/dev/sdb4 263 524 2104515 5 Extended
/dev/sdb5 263 524 2104483+ 83 Linux
# 保存
Command (m for help): w
The partition table has been altered!
Calling ioctl() to re-read partition table.
Syncing disks.
[root@localhost ~]# fdisk -l
Device Boot Start End Blocks Id System
/dev/sdb1 1 262 2104483+ 83 Linux
/dev/sdb4 263 524 2104515 5 Extended
/dev/sdb5 263 524 2104483+ 83 Linux
如果w保存时, 报错, 提示分区表正在使用, 可以执行
partprobe
重新载入分区表, 无效的话, 就需要重新启动计算机
2. 格式化分区并挂载
- 分区后, 需要格式化分区, 写入文件系统, 才能使用, 不写入文件系统, 无法使用
mkfs -t ext4 /dev/sdb1
# 没有格式化, 无法使用dumpe2fs查看
[root@localhost ~]# dumpe2fs /dev/sdb1
dumpe2fs 1.41.12 (17-May-2010)
dumpe2fs: Bad magic number in super-block 当尝试打开 /dev/sdb1 时
找不到有效的文件系统超级块.
[root@localhost ~]# mkdir /disk1
# 无法挂载
[root@localhost ~]# mount /dev/sdb1 /disk1/
mount: you must specify the filesystem type
- 格式化/dev/sdb1,
[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
131648 inodes, 526120 blocks
26306 blocks (5.00%) reserved for the super user
第一个数据块=0
Maximum filesystem blocks=541065216
17 block groups
32768 blocks per group, 32768 fragments per group
7744 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912
正在写入inode表: 完成
Creating journal (16384 blocks): 完成
Writing superblocks and filesystem accounting information: 完成
This filesystem will be automatically checked every 29 mounts or
180 days, whichever comes first. Use tune2fs -c or -i to override.
[root@localhost ~]# mount /dev/sdb1 /disk1/
- 将设备文件名
/dev/sdb1
挂载到/disk1
下
[root@localhost ~]# mount /dev/sdb1 /disk1/
- 查看设备挂载情况(
df -h
或者mount
)
[root@localhost /]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/VolGroup-lv_root 18G 9.4G 7.2G 57% /
tmpfs 491M 0 491M 0% /dev/shm
/dev/sda1 485M 33M 427M 8% /boot
/dev/sdb1 2.0G 68M 1.9G 4% /disk1
/dev/sdb5 2.0G 68M 1.9G 4% /disk5
- 手动挂载每次开机都会丢失, 如何自动挂载呢?
3. 自动挂载
自动挂载依赖于/etc/fstab
配置文件, 查看该文件
/dev/mapper/VolGroup-lv_root / ext4 defaults 1 1
UUID=9f22d879-291d-42b6-89ab-2dda6c5a65d2 /boot ext4 defaults 1 2
/dev/mapper/VolGroup-lv_swap swap swap defaults 0 0
tmpfs /dev/shm tmpfs defaults 0 0
devpts /dev/pts devpts gid=5,mode=620 0 0
sysfs /sys sysfs defaults 0 0
proc /proc proc defaults 0 0
- 各字段含义
- 第一字段: 分区设备文件名或UUID(硬盘通用唯一识别码, 可以通过
dumpe2fs
命令查看) - 第二字段: 挂载点
- 第三字段: 文件系统名称
- 第四字段: 挂载参数
- 第五字段: 指定分区是否被dump备份, 0: 不备份, 1: 每天 2: 不定期, 备份数据保存目录在各自分区挂载点的
lost+found
目录 - 第六字段: 指定分区是否被fsck检测, 0不检测, 数据越小, 优先级越高, 系统在启动时, 会根据该字段确定扫描优先级, 根分区优先级应该是最高, 先扫描根分区, 再扫描boot分区, 自己加入的分区, 优先级也不应该高于根分区1
- 第一字段: 分区设备文件名或UUID(硬盘通用唯一识别码, 可以通过
想要自动挂载, 需要修改该文件, 加入如下内容, 将sdb1和sdb5自动挂载
/dev/sdb1 /disk1 ext4 defaults 1 2
/dev/sdb5 /disk5 ext4 defaults 1 2
4. 文件修复
修改该文件一定要小心, 如果写错, 系统开机时可能会直接崩溃,
修改完, 应该先执行mount -a
, 依据配置文件/etc/fstab的内容, 自动挂载,
可以在不重启的情况下, 检测fstab文件是否正确**
如果系统出错, 没有启动, 输入root用户名, 进入系统后, 需要执行
mount -o remount,rw /
重新挂载根分区, 并将分区设置为读写, 就可以修改/etc/fstab
四. 分配swap分区
- 首先参照分区方法, 将sdb硬盘再增加一个分区,
fdisk /dev/sdb
Device Boot Start End Blocks Id System
/dev/sdb1 1 262 2104483+ 83 Linux
/dev/sdb2 525 656 1060290 83 Linux
/dev/sdb4 263 524 2104515 5 Extended
/dev/sdb5 263 524 2104483+ 83 Linux
- 进入fdisk交互界面, 更改/dev/sdb2分区的ID号, 改为swap 82
# 更改id
Command (m for help): t
# 更改sdb2, 输入2
Partition number (1-5): 2
# 更改为82
Hex code (type L to list codes): 82
Changed system type of partition 2 to 82 (Linux swap / Solaris)
#查看, 已经设置为Linux swap
Command (m for help): p
Device Boot Start End Blocks Id System
/dev/sdb1 1 262 2104483+ 83 Linux
/dev/sdb2 525 656 1060290 82 Linux swap / Solaris
- w保存退出时, 会出现
WARNING: Re-reading the partition table failed with error 16: 设备或资源忙.
The kernel still uses the old table. The new table will be used at
the next reboot or after you run partprobe(8) or kpartx(8)
- 格式化分区为swap格式
mkswap /dev/sdb2
[root@localhost /]# mkswap /dev/sdb2
/dev/sdb2: 没有那个文件或目录
# 没有生效, 只能重启计算机
# 重启后
[root@localhost ~]# mkswap /dev/sdb2
Setting up swapspace version 1, size = 1060284 KiB
no label, UUID=e8a404e3-3389-471a-95ef-0ee343a2b2cb
- 加入swap分区
swapon /dev/sdb2
# swap 为2G
[root@localhost ~]# free -m | grep Swap
Swap: 1983 0 1983
# 将/dev/sdb2加入到swap分区
[root@localhost ~]# swapo
swapoff swapon
[root@localhost ~]# swapon /dev/sdb2
# 增加了一个G
[root@localhost ~]# free -m | grep Swap
Swap: 3019 0 3019
- 从swap中取消
swapoff /dev/sdb2
[root@localhost ~]# swapoff /dev/sdb2
[root@localhost ~]# free -m | grep Swap
Swap: 1983 0 1983
- swap分区开机自动挂载
修改`/etc/fstab, 加入如下内容, reboot重启计算机
/dev/sdb2 swap swap defaults 0 0