Linux的磁盘与分区
对于Windows机器上的一块磁盘,我们可以对磁盘进行格式化、分区(分成不同C盘、D盘、E盘等),然后在不同的分区下创建、删除、修改文件与文件夹。Linux系统对于磁盘的处理是不一样的,首先Linux也可以对磁盘进行格式化(mkfs命令),然后对磁盘进行分区(fdisk 命令),分区完之后,Linux系统需要我们将分区‘挂载’到一个目录下去,将一个分区和一个目录对应起来,当我们访问这个目录时,就是相当于访问磁盘的这个分区了。
分区和文件关系示意图:
硬盘说明
Linux硬盘分IDE硬盘和SCSI硬盘,目前基本上是SCSI硬盘
对于IDE硬盘,驱动器标识符为”hdx~”,其中”hd”表明分区所在设备的类型为IDE硬盘。”x”为盘号(a为基本盘,b为基本从属盘,c为辅助主盘,d为辅助从属盘),”~”代表分区,前四个分区用数字1到4表示,它们是主分区或扩展分区,从5开始就是逻辑分区。例如,hda3表示为第一个IDE硬盘上的第三个主分区或扩展分区,hdb2表示为第二个IDE硬盘上的第二个主分区或扩展分区。
对于SCSI硬盘则标识为”sdx~”,SCSI硬盘是用”sd”来表示分区所在设备的类型的,其余则和IDE硬盘的表示方法一样(x可以为abcd分别对应第1、2、3、4块硬盘)。
查看设备挂载信息
查看所有的设备 fdisk -l
1 | [root@localhost ~]# fdisk -l |
查看设备的挂载情况
lsblk
命令的英文是“list block”,可以用树状方式列出所有可用块设备的信息,这种方式能够显示他们之间的依赖关系,但是它不会列出RAM盘的信息。块设备包括硬盘,闪存盘,CD-ROM等等。
1 | [root@localhost ~]# lsblk |
从上面的信息可得知,sda 这块盘大小总共40G,有 sda1、sda2、sda3 3个分区,并且 sda1 的挂载点是系统启动目录 /boot,sda2 的挂载点是系统 swap 区,sda3 的挂载点是根目录。sdb 这块盘总共256G,没有分区也没有做挂载。
此外可以使用lsblk -f
命令,我们能够得到每个分区的UUID,这个UUID在配置挂载时可以用得到。1
2
3
4
5
6
7
8[root@localhost ~]# lsblk -f
NAME FSTYPE LABEL UUID MOUNTPOINT
sda
├─sda1 xfs bf43b05e-7862-46bd-b886-9560f0a85822 /boot
├─sda2 swap 182f6a85-5579-48d8-a621-6d4f9098fbdd [SWAP]
└─sda3 xfs 9e3c1b84-d14b-4e31-b75a-74a77c8ee2b4 /
sdb ext4 295f4495-fe4f-4d74-abfd-198089383f6c
sr0
操作示例
本示例基于VMware的虚拟机和CentOS7系统。
步骤一:添加一块硬盘
步骤二:对硬盘分区
分区的命令是 fdisk + 磁盘的名称1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47[root@localhost ~]# fdisk /dev/sdb
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 0xfa4c6082.
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
g create a new empty GPT partition table
G create an IRIX (SGI) partition table
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): n
Partition type:
p primary (0 primary, 0 extended, 4 free)
e extended
Select (default p): # 默认选择p,主分区
Partition number (1-4, default 1): # 默认选择1,分区1
First sector (2048-536870911, default 2048): # 默认从2048字节开始
Using default value 2048
Last sector, +sectors or +size{K,M,G} (2048-536870911, default 536870911): # 默认到 536870911 字节位置结束
Using default value 536870911
Partition 1 of type Linux and of size 256 GiB is set
Command (m for help): w
The partition table has been altered!
Calling ioctl() to re-read partition table.
Syncing disks.
分区完成后,可以看到将 /deb/sdb 分了一个区。1
2
3
4
5
6
7
8
9[root@localhost ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 40G 0 disk
├─sda1 8:1 0 300M 0 part /boot
├─sda2 8:2 0 3.9G 0 part [SWAP]
└─sda3 8:3 0 35.9G 0 part /
sdb 8:16 0 256G 0 disk
└─sdb1 8:17 0 256G 0 part
sr0 11:0 1 1024M 0 rom
格式化分区
分区要进行格式化之后才会分配UUID。
格式化的命令是:mkfs -t ext4 /dev/sdb1
或者mkfs.ext4 /dev/sdb1
,其中 -t ext4
表示分区的文件系统类型。我们通过man mkfs
命令可以查到默认的文件类型是 ext2 。
1 | [root@localhost ~]# mkfs -t ext4 /dev/sdb1 |
挂载分区到目录
这里我们将 /dev/sdb1 这个分区挂载到 /opt/oracle 这个目录,
挂载可以使用mount
命令,语法格式是:1
mount [设备名称] [挂载目录]
比如这里使用mount /dev/sdb1 /opt/oracle
。
取消挂载使用unmount
命令,语法格式是unmount [设备名称]
或者unmount [挂载目录]
。
但是注意:mount
命令挂载重启后会失效,即重启后挂载点消失。 这种挂载方式在使用U盘对文件做一些临时操作是适用的,但如果想要永久挂载一块盘,则需要通过修改配置文件的方式。因为VMware虚拟机有时候会重启,所以这里我们使用永久挂载的方式。
- 编辑/etc/fstab文件,增加一行 /dev/sdb1 的挂载配置信息。
- 添加完成后执行
mount -a
命令或重启虚拟机(reboot)即可生效。1
2
3
4
5
6
7
8
9
10[root@localhost ~]# mount -a
[root@localhost ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 40G 0 disk
├─sda1 8:1 0 300M 0 part /boot
├─sda2 8:2 0 3.9G 0 part [SWAP]
└─sda3 8:3 0 35.9G 0 part /
sdb 8:16 0 256G 0 disk
└─sdb1 8:17 0 256G 0 part /opt/oracle
sr0 11:0 1 1024M 0 rom
查看磁盘空间
df -h
df 以磁盘分区为单位查看文件系统,可以获取硬盘被占用了多少空间,目前还剩下多少空间等信息。
例如,我们使用df -h命令来查看磁盘信息, -h 选项为根据大小适当显示:
显示内容参数说明:
- Filesystem:文件系统
- Size: 分区大小
- Used: 已使用容量
- Avail: 还可以使用的容量
- Use%: 已用百分比
- Mounted on: 挂载点
du -h
du 的英文原义为 disk usage,含义为显示磁盘空间的使用情况,用于查看当前目录的总大小。
参数选项:
- -s 指定目录占用大小总和
- -h 带计量单位,例如:1K 234M 2G,提高可读性
- -a 含文件
- –max-depth=1 子目录的深度
- -c 列出明细的同时,增加汇总值
例如查看当前目录的大小:1
2 du -sh
605M .
显示指定文件所占空间:1
2 du log2012.log
300 log2012.log
显示test目录所占空间情况:1
2
3
4
5
6
7
8
9
10
11
12
13 du -h test
608K test/test6
308K test/test4
4.0K test/scf/lib
4.0K test/scf/service/deploy/product
4.0K test/scf/service/deploy/info
12K test/scf/service/deploy
16K test/scf/service
4.0K test/scf/doc
4.0K test/scf/bin
32K test/scf
8.0K test/test3
1.3M test
更常见的是查询深度为1的磁盘占用情况:1
2
3
4 du -ah --max-depth=1
4.0K ./test
4.0K ./test.zip
8.0K .