Linux 分区

原理介绍

  • Linux 来说无论有几个分区,分给哪一目录使用,它归根结底就只有一个根目录,一个独立且唯一的文件结构 , Linux中每个分区都是用来组成整个文件系统的一部分。
  • Linux 采用了一种叫“载入”的处理方法,它的整个文件系统中包含了一整套的文件和目录,且将一个分区和一个目录联系起来。这时要载入的一个分区将使它的存储空间在一个目录下获得。
  • 示意图

磁盘分区、挂载 - 图1

硬盘说明

  1. Linux 硬盘分 IDE 硬盘和 SCSI 硬盘,目前基本上是 SCSI 硬盘
  2. 对于 IDE 硬盘,驱动器标识符为“hdx~”,其中“hd”表明分区所在设备的类型,这里是指 IDE 硬盘了。“x”为盘号(a 为基本盘,b 为基本从属盘,c 为辅助主盘,d 为辅助从属盘),“~”代表分区,前四个分区用数字 1 到 4 表示,它们是主分区或扩展分区,从 5 开始就是逻辑分区。例,hda3 表示为第一个 IDE 硬盘上的第三个主分区或扩展分区,hdb2 表示为第二个 IDE 硬盘上的第二个主分区或扩展分区。
  3. 对于 SCSI 硬盘则标识为“sdx~”,SCSI 硬盘是用“sd”来表示分区所在设备的类型的,其余则和 IDE 硬盘的表示方法一样

image.png

查看所有设备挂载情况

命令 :lsblk 或 者 lsblk -f

  1. [root@localhost ~]# lsblk
  2. NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
  3. sda 8:0 0 20G 0 disk
  4. ├─sda1 8:1 0 1G 0 part /boot
  5. └─sda2 8:2 0 19G 0 part
  6. ├─centos-root 253:0 0 17G 0 lvm /
  7. └─centos-swap 253:1 0 2G 0 lvm [SWAP]
  8. sr0 11:0 1 4.3G 0 rom /run/media/root/CentOS 7 x86_64
  9. [root@localhost ~]# lsblk -f
  10. NAME FSTYPE LABEL UUID MOUNTPOINT
  11. sda
  12. ├─sda1 ext4 37f94097-3d5e-41c6-83fc-0e15803cf538 /boot
  13. └─sda2 LVM2_mem bTVNt2-5Bz4-13Jz-Flv2-Epm6-jRv0-0CHVWf
  14. ├─centos-root ext4 32f5f8ef-cb3b-4d6a-956d-9b0b8b47ffe2 /
  15. └─centos-swap swap 35c6574c-d123-496b-8ea6-5edf16dafea9 [SWAP]
  16. sr0 iso9660 CentOS 7 x86_64
  17. 2018-11-25-23-54-16-00 /run/media

案例

说明

下面我们以增加一块硬盘为例来熟悉下磁盘的相关指令和深入理解磁盘分区、挂载、卸载的概念。

如何增加一块硬盘

  • 虚拟机添加硬盘
  • 分区
  • 格式化
  • 挂载
  • 设置可以自动挂载

    虚拟机增加硬盘步骤

    在【虚拟机】菜单中,选择【设置】,然后设备列表里添加硬盘,然后一路【下一步】,中间只有选择磁盘大小的地方需要修改,至到完成。然后重启系统(才能识别)!
    image.png
    image.png
    image.png

    虚拟机增加硬盘步骤 2

    1. 分区命令 fdisk /dev/sdb
    2. 开始对/sdb 分区
    3. m 显示命令列表
    4. p 显示磁盘分区 fdisk l n 新增分区
    5. d 删除分区
    6. w 写入并退出
    7. 说明: 开始分区后输入 n,新增分区,然后选择 p ,分区类型为主分区。两次回车默认剩余全部空间。最后输入 w 写入分区并退出,若不保存退出输入 q
    ``` [root@localhost ~]# fdisk /dev/sdb 欢迎使用 fdisk (util-linux 2.23.2)。

更改将停留在内存中,直到您决定将更改写入磁盘。 使用写入命令前请三思。

Device does not contain a recognized partition table 使用磁盘标识符 0x7ddd3523 创建新的 DOS 磁盘标签。

命令(输入 m 获取帮助):m 命令操作 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)

命令(输入 m 获取帮助):n Partition type: p primary (0 primary, 0 extended, 4 free) e extended Select (default p): p 分区号 (1-4,默认 1):1 起始 扇区 (2048-2097151,默认为 2048): 将使用默认值 2048 Last 扇区, +扇区 or +size{K,M,G} (2048-2097151,默认为 2097151): 将使用默认值 2097151 分区 1 已设置为 Linux 类型,大小设为 1023 MiB

命令(输入 m 获取帮助):w The partition table has been altered!

Calling ioctl() to re-read partition table. 正在同步磁盘。 [root@localhost ~]# lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 20G 0 disk ├─sda1 8:1 0 1G 0 part /boot └─sda2 8:2 0 19G 0 part ├─centos-root 253:0 0 17G 0 lvm / └─centos-swap 253:1 0 2G 0 lvm [SWAP] sdb 8:16 0 1G 0 disk └─sdb1 8:17 0 1023M 0 part sr0 11:0 1 4.3G 0 rom /run/media/root/CentOS 7 x86_64

  1. <a name="ReuPa"></a>
  2. ### 虚拟机增加硬盘步骤 3
  3. 格式化磁盘<br />分区命令: mkfs -t ext4 /dev/sdb1<br />其中 ext4 是分区类型

[root@localhost ~]# mkfs -t ext4 /dev/sdb1 mke2fs 1.42.9 (28-Dec-2013) 文件系统标签= OS type: Linux 块大小=4096 (log=2) 分块大小=4096 (log=2) Stride=0 blocks, Stripe width=0 blocks 65536 inodes, 261888 blocks 13094 blocks (5.00%) reserved for the super user 第一个数据块=0 Maximum filesystem blocks=268435456 8 block groups 32768 blocks per group, 32768 fragments per group 8192 inodes per group Superblock backups stored on blocks: 32768, 98304, 163840, 229376

Allocating group tables: 完成
正在写入inode表: 完成
Creating journal (4096 blocks): 完成 Writing superblocks and filesystem accounting information: 完成

[root@localhost ~]# lsblk -f NAME FSTYPE LABEL UUID MOUNTPOINT sda
├─sda1 ext4 37f94097-3d5e-41c6-83fc-0e15803cf538 /boot └─sda2 LVM2_mem bTVNt2-5Bz4-13Jz-Flv2-Epm6-jRv0-0CHVWf ├─centos-root ext4 32f5f8ef-cb3b-4d6a-956d-9b0b8b47ffe2 / └─centos-swap swap 35c6574c-d123-496b-8ea6-5edf16dafea9 [SWAP] sdb
└─sdb1 ext4 b13e2be1-e090-4db7-b49c-f8531c71c862
sr0 iso9660 CentOS 7 x86_64 2018-11-25-23-54-16-00 /run/media/

  1. <a name="LUVkT"></a>
  2. ### 虚拟机增加硬盘步骤 4
  3. 挂载: 将一个分区与一个目录联系起来,<br />mount 设备名称 挂载目录<br />例如: mount /dev/sdb1 /newdisk

[root@localhost /]# mkdir newdisk [root@localhost /]# mount /dev/sdb1 /newdisk/ [root@localhost /]# lsblk -f NAME FSTYPE LABEL UUID MOUNTPOINT sda
├─sda1 ext4 37f94097-3d5e-41c6-83fc-0e15803cf538 /boot └─sda2 LVM2_mem bTVNt2-5Bz4-13Jz-Flv2-Epm6-jRv0-0CHVWf ├─centos-root ext4 32f5f8ef-cb3b-4d6a-956d-9b0b8b47ffe2 / └─centos-swap swap 35c6574c-d123-496b-8ea6-5edf16dafea9 [SWAP] sdb
└─sdb1 ext4 b13e2be1-e090-4db7-b49c-f8531c71c862 /newdisk sr0 iso9660 CentOS 7 x86_64 2018-11-25-23-54-16-00 /run/media/

  1. 卸载<br />umount 设备名称 或者 挂载目录<br />例如: umount /dev/sdb1 umount /newdisk

[root@localhost /]# umount /dev/sdb1 [root@localhost /]# lsblk -f NAME FSTYPE LABEL UUID MOUNTPOINT sda
├─sda1 ext4 37f94097-3d5e-41c6-83fc-0e15803cf538 /boot └─sda2 LVM2_mem bTVNt2-5Bz4-13Jz-Flv2-Epm6-jRv0-0CHVWf ├─centos-root ext4 32f5f8ef-cb3b-4d6a-956d-9b0b8b47ffe2 / └─centos-swap swap 35c6574c-d123-496b-8ea6-5edf16dafea9 [SWAP] sdb
└─sdb1 ext4 b13e2be1-e090-4db7-b49c-f8531c71c862
sr0 iso9660 CentOS 7 x86_64 2018-11-25-23-54-16-00 /run/media/

  1. 注意: 用命令行挂载,重启后会失效
  2. <a name="K2Oog"></a>
  3. ### 虚拟机增加硬盘步骤 5
  4. 永久挂载: 通过修改/etc/fstab 实现挂载<br />添加完成后 执行 mount a 即刻生效

[root@localhost ~]# vim /etc/fstab [root@localhost ~]# cat /etc/fstab

#

/etc/fstab

Created by anaconda on Sun Jul 4 21:11:47 2021

#

Accessible filesystems, by reference, are maintained under ‘/dev/disk’

See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info

# /dev/mapper/centos-root / ext4 defaults 1 1 /dev/sdb1 /newdisk ext4 defaults 0 0 UUID=37f94097-3d5e-41c6-83fc-0e15803cf538 /boot ext4 defaults 1 2 /dev/mapper/centos-swap swap swap defaults 0 0

  1. <a name="SXw46"></a>
  2. # 磁盘情况查询
  3. <a name="BceY3"></a>
  4. ## 查询系统整体磁盘使用情况
  5. 基本语法<br />df -h<br />应用实例
  6. > 查询系统整体磁盘使用情况

[root@localhost ~]# df -h 文件系统 容量 已用 可用 已用% 挂载点 /dev/mapper/centos-root 17G 5.8G 10G 37% / devtmpfs 974M 0 974M 0% /dev tmpfs 991M 0 991M 0% /dev/shm tmpfs 991M 11M 981M 2% /run tmpfs 991M 0 991M 0% /sys/fs/cgroup /dev/sdb1 991M 2.6M 922M 1% /newdisk /dev/sda1 976M 136M 774M 15% /boot .host:/ 346G 157G 190G 46% /mnt/hgfs tmpfs 199M 8.0K 199M 1% /run/user/42 tmpfs 199M 0 199M 0% /run/user/0

  1. <a name="XN84U"></a>
  2. ## 查询指定目录的磁盘占用情况
  3. 基本语法

du -h 查询指定目录的磁盘占用情况,默认为当前目录 常用参数 -s 指定目录占用大小汇总 -h 带计量单位 -a 含文件 —max-depth=1 子目录深度 -c 列出明细的同时,增加汇总值

  1. 应用实例
  2. > 查询 /opt 目录的磁盘占用情况,深度为 1

[root@localhost opt]# ls rh tmp tmp2 VMwareTools-10.3.10-13959562.tar.gz vmware-tools-distrib [root@localhost opt]# du -h —max-depth=1 /opt 163M /opt/vmware-tools-distrib 4.0K /opt/rh 40K /opt/tmp 48K /opt/tmp2 217M /opt [root@localhost opt]# du -ha —max-depth=1 /opt 163M /opt/vmware-tools-distrib 4.0K /opt/rh 40K /opt/tmp 48K /opt/tmp2 54M /opt/VMwareTools-10.3.10-13959562.tar.gz 217M /opt [root@localhost opt]# du -hac —max-depth=1 /opt 163M /opt/vmware-tools-distrib 4.0K /opt/rh 40K /opt/tmp 48K /opt/tmp2 54M /opt/VMwareTools-10.3.10-13959562.tar.gz 217M /opt 217M 总用量

  1. <a name="GdPUC"></a>
  2. ## 磁盘情况-工作实用指令
  3. > 统计/opt 文件夹下文件的个数
  4. ls -l /opt | grep "^-" | wc -l

[root@localhost opt]# ls -l /opt 总用量 55128 drwxr-xr-x. 2 root root 4096 10月 31 2018 rh drwxr-xr-x. 3 root root 4096 7月 4 22:53 tmp drwxr-xr-x. 3 root root 4096 7月 4 23:21 tmp2 -r—r—r—. 1 root root 56431201 7月 4 21:30 VMwareTools-10.3.10-13959562.tar.gz drwxr-xr-x. 9 root root 4096 6月 13 2019 vmware-tools-distrib [root@localhost opt]# ls -l /opt |grep “^-“ -r—r—r—. 1 root root 56431201 7月 4 21:30 VMwareTools-10.3.10-13959562.tar.gz [root@localhost opt]# ls -l /opt |grep “^-“ |wc -l 1

  1. > 统计/opt 文件夹下目录的个数
  2. ls -l /opt | grep "^d" | wc -l

[root@localhost opt]# ls -l /opt |grep “^d” |wc -l 4

  1. > 统计/opt 文件夹下文件的个数,包括子文件夹里的
  2. ls -lR /opt | grep "^-" | wc -l

[root@localhost opt]# ls -lR /opt |grep “^-“ |wc -l 1545

  1. > 统计/opt 文件夹下目录的个数,包括子文件夹里的
  2. ls -lR /opt | grep "^d" | wc -l

[root@localhost opt]# ls -lR /opt |grep “^d” |wc -l 509

  1. > 以树状显示目录结构
  2. tree 目录 注意,如果没有 tree ,则使用 yum install tree 安装

[root@localhost opt]# tree /home /home ├── cat.txt ├── hello.txt ├── home │ ├── cat.txt │ └── pig.txt ├── jack │ └── jack.txt ├── jerry ├── mycal ├── myhome.tar.gz ├── myhome.ter.gz ├── myhome.zip ├── my.sh ├── pc.tar.gz ├── pig.txt ├── tom ├── xh └── xq

6 directories, 12 files ```