Linux命令-磁盘的挂载与空间查看

Linux的磁盘与分区

对于Windows机器上的一块磁盘,我们可以对磁盘进行格式化、分区(分成不同C盘、D盘、E盘等),然后在不同的分区下创建、删除、修改文件与文件夹。Linux系统对于磁盘的处理是不一样的,首先Linux也可以对磁盘进行格式化(mkfs命令),然后对磁盘进行分区(fdisk 命令),分区完之后,Linux系统需要我们将分区‘挂载’到一个目录下去,将一个分区和一个目录对应起来,当我们访问这个目录时,就是相当于访问磁盘的这个分区了。

分区和文件关系示意图:

硬盘说明

Linux硬盘分IDE硬盘和SCSI硬盘,目前基本上是SCSI硬盘

  1. 对于IDE硬盘,驱动器标识符为”hdx~”,其中”hd”表明分区所在设备的类型为IDE硬盘。”x”为盘号(a为基本盘,b为基本从属盘,c为辅助主盘,d为辅助从属盘),”~”代表分区,前四个分区用数字1到4表示,它们是主分区或扩展分区,从5开始就是逻辑分区。例如,hda3表示为第一个IDE硬盘上的第三个主分区或扩展分区,hdb2表示为第二个IDE硬盘上的第二个主分区或扩展分区。

  2. 对于SCSI硬盘则标识为”sdx~”,SCSI硬盘是用”sd”来表示分区所在设备的类型的,其余则和IDE硬盘的表示方法一样(x可以为abcd分别对应第1、2、3、4块硬盘)。

查看设备挂载信息

查看所有的设备 fdisk -l

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
[root@localhost ~]# fdisk -l

Disk /dev/sda: 42.9 GB, 42949672960 bytes, 83886080 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x000d0627

Device Boot Start End Blocks Id System
/dev/sda1 * 2048 616447 307200 83 Linux
/dev/sda2 616448 8744959 4064256 82 Linux swap / Solaris
/dev/sda3 8744960 83886079 37570560 83 Linux

Disk /dev/sdb: 274.9 GB, 274877906944 bytes, 536870912 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes

[root@localhost ~]#

查看设备的挂载情况

lsblk命令的英文是“list block”,可以用树状方式列出所有可用块设备的信息,这种方式能够显示他们之间的依赖关系,但是它不会列出RAM盘的信息。块设备包括硬盘,闪存盘,CD-ROM等等。

1
2
3
4
5
6
7
8
[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
sr0 11:0 1 1024M 0 rom

从上面的信息可得知,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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
[root@localhost ~]# mkfs -t ext4 /dev/sdb1
mke2fs 1.42.9 (28-Dec-2013)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
16777216 inodes, 67108608 blocks
3355430 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=2214592512
2048 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
4096000, 7962624, 11239424, 20480000, 23887872

Allocating group tables: done
Writing inode tables: done
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done

挂载分区到目录

这里我们将 /dev/sdb1 这个分区挂载到 /opt/oracle 这个目录,
挂载可以使用mount命令,语法格式是:

1
mount [设备名称]  [挂载目录]

比如这里使用mount /dev/sdb1 /opt/oracle

取消挂载使用unmount命令,语法格式是unmount [设备名称]或者unmount [挂载目录]

但是注意:mount命令挂载重启后会失效,即重启后挂载点消失。 这种挂载方式在使用U盘对文件做一些临时操作是适用的,但如果想要永久挂载一块盘,则需要通过修改配置文件的方式。因为VMware虚拟机有时候会重启,所以这里我们使用永久挂载的方式。

  1. 编辑/etc/fstab文件,增加一行 /dev/sdb1 的挂载配置信息。
  1. 添加完成后执行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 .

------ 本文完 ------