7.1.0: 磁盘管理 - 基本知识和常用命令



1. 磁盘知识

1.1 磁盘分区个数

MBR分区表主分区和扩展分区总数不超过4个,并且只能有最多一个扩展分区;

因为MBR的分区表只有64字节,16个字节记录一个分区信息,所以最多记录4个;

新的GPT分区表没有这个限制

扩展分区下可以创建多个分区

1.2 磁盘命名规则

sata硬盘的设备名称从sda开始,依次是sda,sdb,sdc,sdd…;

ide硬盘的设备名称从hda开始,依次为hda,hdb,hdc,hdd…;

同一块硬盘上的分区编号是由”设备名称”+“数字(从1开始)”组成;
例如sda1、sda2。。。或hda1、hdb1

目前linux已经统一标识为sd开头,需要注意下面示例中磁盘命名被顶掉的问题

# 查看目前vmware虚机的磁盘情况
fdisk -l

Disk /dev/sda: 21.5 GB, 21474836480 bytes
255 heads, 63 sectors/track, 2610 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: 0x000466e9

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *           1          26      204800   83  Linux
Partition 1 does not end on cylinder boundary.
/dev/sda2              26        1301    10240000   83  Linux
/dev/sda3            1301        1428     1024000   82  Linux swap / Solaris
/dev/sda4            1428        2611     9501696    5  Extended
/dev/sda5            1429        2611     9500672   83  Linux

# 关闭虚机,添加IDE格式硬盘

# 开机查看目前磁盘状态
fdisk -l

Disk /dev/sda: 5368 MB, 5368709120 bytes
255 heads, 63 sectors/track, 652 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: 0x00000000


Disk /dev/sdb: 21.5 GB, 21474836480 bytes
255 heads, 63 sectors/track, 2610 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: 0x000466e9

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1   *           1          26      204800   83  Linux
Partition 1 does not end on cylinder boundary.
/dev/sdb2              26        1301    10240000   83  Linux
/dev/sdb3            1301        1428     1024000   82  Linux swap / Solaris
/dev/sdb4            1428        2611     9501696    5  Extended
/dev/sdb5            1429        2611     9500672   83  Linux

默认IDE磁盘排序优于SCSI,所以顶掉了SCSI,命名为sda,SCSI自动成为sdb

IDE磁盘目前也被统一识别为sd开头的命名

所以IDE硬盘和SCSI\SATA硬盘混用的时候一定要注意,IDE会默认排在最前面

如果原来你的SATA硬盘是最前面sda,IDE会挤掉它为sda,而原来的sata会变为sdb

1.3 磁盘格式


2. 磁盘情况查看工具

2.1 df

作用:显示已挂载的分区空间使用情况

语法:df [参数] [文件(此文件所在分区的空间使用情况)]

参数:

# 查看某文件所在分区的分区使用情况
df -h /root/.cshrc
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda2       9.5G  1.2G  7.9G  13% /

# 查看系统所有分区的分区使用情况
df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda2       9.5G  1.2G  7.9G  13% /
tmpfs           491M     0  491M   0% /dev/shm
/dev/sda1       190M   29M  151M  16% /boot
/dev/sda5       8.8G   21M  8.4G   1% /data
# /dev/shm是内存中的分区

# 查看系统分区的inode使用情况
df -ih
Filesystem     Inodes IUsed IFree IUse% Mounted on
/dev/sda2        626K   39K  588K    7% /
tmpfs            123K     1  123K    1% /dev/shm
/dev/sda1         50K    38   50K    1% /boot
/dev/sda5        581K    11  581K    1% /data
# 发现某个磁盘inode占用过大之后,如何定位到具体是什么文件占用了过多的inode
# 查看某个目录下,哪个子目录占用了过多的inode
{ find /data -xdev -printf '%h\n' | sort | uniq -c | sort -k 1 -n; } 2>/dev/null
# 查看某个目录下,哪些文件或目录占用了过多的inode
find . -xdev -type f | cut -d "/" -f 2 | sort | uniq -c | sort -n

2.2 du

作用:估算目录或文件占用空间(并非文件体积大小)

语法:du [参数] [文件]

参数:

PS:

  • du查看的是文件占用空间大小,而ls是查看文件的实际大小。
  • du默认查看的是文件夹,只有目标文件为文件或者加上-a参数时才会显示普通文件的占用空间大小。
# "-a"参数用法举例
# 无"-a"参数时只显示目录占用空间
du -h .
8.0K    ./d
8.0K    ./c
28K     .
# 此目录一共占用24K,而上面两个容量加起来才12K,是因为还有普通文件没统计进来
# 之所以都是4.0K的整数倍,是因为磁盘最小的一块就是4K啊

# 加上"-a"参数后,显示所有文件占用空间
du -ah .
4.0K    ./d/e.txt
8.0K    ./d
4.0K    ./b.txt
4.0K    ./c/f.txt
8.0K    ./c
4.0K    ./a.txt
28K     .
# 此目录占用28K,而上面所有文件占用空间加起来是32K?
# 因为此目录下面的子目录d和c的占用空间已经包含了其本身下面的文件占用的空间数,所以上面计算相当于重复计算了d和c目录下面的文件,所以才会出现这样情况
# 若不计算此目录子目录下的文件,也就是不计算e.txt和f.txt的占用空间,计算出来的占用量是24K,差距的4K是因为此目录本身也需要占用去4K的磁盘空间

# 最实用和常用的使用方法,参数"-s"
# 需要知道此目录总共占用空间
du -sh .
28K     .

# 需要知道此目录下第一层级目录和普通文件各自占用空间
du -sh ./*
4.0K    ./a.txt
4.0K    ./b.txt
8.0K    ./c
8.0K    ./d

# 这样的好处是汇总了目录的容量,不再重复显示目录下文件的单独占用空间,符合大多数情况下我们的使用需求

2.3 blkid

作用:输出存储设备的属性信息

语法:blkid [参数] [设备]

blkid
/dev/sda1: UUID="619a84a7-7fb2-4ad0-9d8d-5860d14610a1" TYPE="ext4"
/dev/sda2: UUID="f354fcc9-2144-4b51-b55b-0727570e2450" TYPE="ext4"
/dev/sda3: UUID="2022d4bf-6e4a-4e94-a67b-112389296afa" TYPE="swap"
/dev/sda5: UUID="864ecee1-bb51-42f8-bb77-4ec3f86e09b0" TYPE="ext4"
/dev/sdb1: UUID="4b9301b7-c2d8-4ee1-925a-58c7987bf72b" TYPE="ext4"
/dev/sdb2: UUID="230151ac-6f82-428e-9594-3c13f69f08b8" TYPE="ext4"
/dev/sdb3: UUID="91560800-aa5d-42a2-a3d4-b2aafc09ff78" TYPE="xfs"

blkid /dev/sdb3
/dev/sdb3: UUID="91560800-aa5d-42a2-a3d4-b2aafc09ff78" TYPE="xfs"

2.4 mount

作用:查看分区格式及挂载点

mount |grep sda
/dev/sda2 on / type ext4 (rw)
/dev/sda1 on /boot type ext4 (rw)
/dev/sda5 on /data type ext4 (rw)