Linux 磁盘分区详解

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux 磁盘分区详解相关的知识,希望对你有一定的参考价值。

参考技术A Linux 系统中所有的硬件设备都是用文件的形式来表示和使用的,也就是说,如果你想使用某个硬件设备首先你就需要将其挂载到某个目录下面,通过对这个目录的操作来操作设备;如果不挂载,通过Linux系统中的图形界面系统可以查看找到硬件设备,但命令行方式无法找到。

并不是根目录下任何一个目录都可以作为挂载点,由于挂载操作会使得原有目录中文件被隐藏,因此根目录以及系统原有目录都不要作为挂载点,会造成系统异常甚至崩溃,挂载点最好是新建的空目录

磁盘也是一样的,磁盘的文件是存放在 /dev 目录下,磁盘设备文件的命名规则为:

常见的主设备号有:sd,hd;它们是代表的不同的磁盘类型: sd 代表的 IDE 硬盘, hd 代表的是 SCSI 硬盘

次设备号就是同一类型设备的次序,用 [a-z] 来表示, /dev/sda 表示第一块 IDE 类型的磁盘, /dev/sdb 表示第二块 IDE 类型的磁盘

磁盘分区编号,每一块磁盘都会被划分为多个磁盘分区(这个下面会介绍),每一个分区都会有一个编号,比如: /dev/sda1 表示这是该磁盘的第一个分区,以此类推

在 Linux 中,每一个硬盘设备都只能划分四个主分区;若是划分了一个扩展分区那最多可以划分三个主分区;可以表示为:

主分区加扩展分区最多只有四个;可以全部划分为主分区,也可以之划分一个主分区;但是扩展分区最多只有一个;扩展分区是不能直接使用的,还有进一步划分为逻辑分区才能使用;一个扩展分区可以划分为多个逻辑分区;

主分区的分区编号是:1,2,3,4;从扩展分区划分出来的逻辑分区的编号是从 5 开始,以次累加

这跟系统启动有关系;当你启动电脑时,首先就会加载 Bios 信息,这里面包含了 Cpu 和其他硬件设备的信息;找到它计算机就知道怎么启动了

接下来,它会去找 MBR(Master Boot Record) ,也就是主引导记录;为了方便 BIOS 的查找,所以就会把它放在磁盘上第0磁道上的第一个扇区中,磁盘中每个扇区有 512 字节;虽然只有这么大一点,但是要存三部分信息:

磁盘分区表总共只有 64 字节,而每个分区信息占 16 个字节,所以就只能有四个主分区了

这应该是历史遗留的问题了,一开始只有四个分区,后来发现四个分区不够用,就引入了扩展分区,而扩展分区是不能直接使用的,它必须再划分为逻辑分区,逻辑分区的数量可以是任意多个。

对用户而言,主分区和逻辑分区使用起来没有任何的区别,同时还能够达到无限分区的目的

我想很多人都思考过这个问题,我再了解了之后才发现磁盘分区还是有很多的好处的。具体例子:

现在给你一个仓库,你打算存放快递,一开始你一股脑的把所有的快递直接放进去,等到别人来取快递的时候你就发愁了,几十甚至上百个快递得找到啥时候啊

所以你打算开始分区管理,因为你代理了中通,圆通,百世等好几个快递,所以你打算按照不同的快递分为三个货架;

过一段时间发现同一种快递如果量大的时候还是会混乱;因此你又想了个办法就是按照日期给快递编号,然后按照不同的日期将货架分为多层,每一层存放某一天的快递,同时你又找了个表记录了每个分区快递存放的位置,这大大增加了存取的效率

磁盘分区的目的,

Linux 常见目录:

一般要是新手,可以只建立两个分区:

这种分区方式比较简单,如果只是测试可以用这种;要是想当成一个常用的系统,就需要更细一点划分了,常用的分区方案如下(假如有磁盘有100G):

20磁盘管理—linux磁盘管理详解(分区)

  • linux磁盘管理

  • 添加磁盘步骤:

  • fdisk 管理磁盘分区

  • 格式化文件系统。

  • 设备挂载

  • 开机自动挂载

    • UUID挂载

  • 取消挂载点

  • Parted(gpt大于2G分区)

  • 查看文件系统的使用情况。

  • df 查看挂载信息与磁盘使用量

  • du 查看使用量

  • 查看分区状况lsblk

  • 查看设备信息blkid

linux磁盘管理

当全新安装了一块新的硬盘设备后,为了更充分、安全的利用硬盘空间首先要进行磁盘的分区,然后格式化,最后挂载使用。

添加磁盘步骤:

添加设备->分区->格式化(创建文件系统)-> [起名]->修改配置文件->创建一个挂载点->挂载


fdisk 管理磁盘分区

fdisk命令用于管理磁盘分区,格式为:“fdisk [磁盘名称]”。 
管理某硬盘的分区:“fdisk /dev/sda”

常用参数 作用 
m 查看全部可用的参数 
n 添加新的分区 
d 删除某个分区信息 
l 列出所有可用的分区类型 
t 改变某个分区的类型 
p 查看分区表信息 
w 保存并退出 
q 不保存直接退出

使用fdisk命令对sdb硬盘进行分区:

[[email protected] ~]# fdisk /dev/sdb
Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel
Building a new DOS disklabel with disk identifier 0x7516baf3.
Changes will remain in memory only, until you decide to write them.
After that, of course, the previous content won‘t be recoverable.

Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite)

WARNING: DOS-compatible mode is deprecated. It‘s strongly recommended to
        switch off the mode (command ‘c‘) and change display units to
        sectors (command ‘u‘).

Command (m for help):

敲击字符p查看分区表信息(当前为空):

Command (m for help): p

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: 0x7516baf3

  Device Boot      Start         End      Blocks   Id  System

敲击字符n创建新的分区信息:

Command (m for help): n

敲击字符p,这个p代表是主分区,e为扩展分区:

Command action
  e   extended
  p   primary partition (1-4)
p

敲击数字1代表分区编号为1

Partition number (1-4): 1

磁盘的起始扇区,直接回车即可:

First cylinder (1-2610, default 1): 

键入+2G,代表该分区的大小为2G

Last cylinder, +cylinders or +size{K,M,G} (1-2610, default 2610): +2G

再看下分区表信息(增加了sdb1分区信息):

Command (m for help): p

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: 0x7516baf3

  Device Boot      Start         End      Blocks   Id  System
/dev/sdb1               1         262     2104483+  83  Linux

敲击字符w,将上述分区信息保存:

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.
[[email protected] ~]#

让内核同步分区信息(此步骤仅在没有找到分区设备的情况下才需要执行,非必要动作。):

[root@localhost ~]# partprobe 

格式化文件系统。

在Linux系统中用于格式化的命令是mkfs,它支持的文件类型有: 
cramfs,ext2,ext3,ext4,fat,msdos,xfs,btrfs,minix,vfat

使用方法非常的简单:"mkfs.文件类型名称",例如要格式分区为ext4,则命令为"mkfs.ext4 硬盘分区名称"。 
使用mkfs.ext4来对/dev/sdb1进行格式化:

[root@localhost ~]# mkfs.ext4 /dev/sdb1
mke2fs 1.41.12 (17-May-2010)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
131648 inodes, 526120 blocks
26306 blocks (5.00%) reserved for the super user
First data block=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

Writing inode tables: done                            
Creating journal (16384 blocks): done
Writing superblocks and filesystem accounting information: done

This filesystem will be automatically checked every 37 mounts or
180 days, whichever comes first.  Use tune2fs -c or -i to override.

设备挂载

将硬盘设备挂载到/web目录。

[root@localhost ~]# mkdir /web
[root@localhost ~]# mount /dev/sdb1 /web/

开机自动挂载

设置系统启动后自动挂载该硬盘设备

[[email protected] ~]# vim /etc/fstab
/dev/sdb1               /web                    ext4    defaults        0 0
要挂载的分区  挂载点 文件系统类型  挂载选项    是否备份    是否检测

最后两个0

第一个0:fs_dump 是否要使用dump命令进行备份. 0为不备份,1为要备份 。 
第二个0:fs_pass – 该字段被fsck命令用来决定在启动时是否需要被扫描的文件系统的顺序,根文件系统/对应该字段的值应该为1,其他文件系统应该为2。若该文件系统无需在启动 时扫描则设置该字段为0

UUID挂载

UID是一个标识你系统中的存储设备的字符串,其目的是帮助使用者唯一的确定系统中的所有存储设备,不管它们是什么类型的。它可以标识DVD驱动器,USB存储设备以及你系统中的硬盘设备等。

取消挂载点

umount命令用于撤销已经挂载的设备文件,格式为:“umount [挂载点/设备文件]”。 
取消对/dev/sdb1设备文件的挂载:

[root@localhost ~]# umount /dev/sdb1

特点:

它是真正的唯一标志符 
Linux中的许多关键功能现在开始依赖于UUID

查找UUID

可以通过 blkid 命令获取各分区的UUID

[email protected] ~]# blkid | grep  sdb1
/dev/sdb1: LABEL="cc" UUID="11e9fc80-cd17-46fa-b0ff-0e5bdc2fd133" TYPE="ext4"
[[email protected] ~]# tune2fs -l /dev/sdb1  | grep UUID
Filesystem UUID:          11e9fc80-cd17-46fa-b0ff-0e5bdc2fd133

Parted(gpt大于2G分区)

通常我们用的比较多的一般都是fdisk工具来进行分区,但是现在由于磁盘越来越廉价,而且磁盘空间越来越大;而fdisk工具他对分区是有大小限制的,它只能划分小于2T的磁盘。但是现在的磁盘空间很多都已经是远远大于2T了,甚至达到2.5T和3T,那要怎么办能,有两个方法,其一是通过卷管理来实现,其二就是通过我们今天谈到的Parted工具来实现对GPT磁盘进行分区操作。

技术分享

然后格式化,挂载使用

查看文件系统的使用情况。

df 查看挂载信息与磁盘使用量

df命令用于查看挂载点信息与磁盘使用量,格式为:“df [选项] [文件]”。 
查看挂载信息与硬盘使用量:“df -h”

参数作用 
-a 显示出所有的文件系统(包括虚拟的) 
--total 展出出总体使用量 
-h 更易读的容量格式如1K,234M,2G… 
-i 展示出Inode的信息(默认是磁盘使用信息) 
-T 显示出文件系统的类型

查看到所有已挂载的挂载信息与硬盘使用情况:

[[email protected] ~]# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/mapper/vg0-root   20G  333M   19G   2% /
tmpfs                 491M     0  491M   0% /dev/shm
/dev/sda1             190M   34M  147M  19% /boot
/dev/mapper/vg0-usr   9.8G  1.9G  7.4G  21% /usr
/dev/mapper/vg0-var    20G  113M   19G   1% /var
/dev/sdb1             2.0G  3.1M  1.9G   1% /web

du 查看使用量

du命令用于查看磁盘的使用量,格式为:“ du [选项] [文件]”

查看根目录的总占用空间:du -sh / 
查看当前目录下各文件所占空间:du -sh *

参数 作用 
-a 评估每个文件而非目录整体占用量。 
-c 评估每个文件并计算出总占用量总和。 
-h 更易读的容量格式如1K,234M,2G… 
-s 仅显示占用量总和。

查看到该挂载目录的占用硬盘量:

[root@localhost ~]# du -sh /web/
20K /web/

查看分区状况lsblk

[[email protected] ~]# lsblk
NAME                MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sr0                  11:0    1 1024M  0 rom  
sda                   8:0    0   80G  0 disk
├─sda1                8:1    0  200M  0 part /boot
└─sda2                8:2    0   60G  0 part
 ├─vg0-root (dm-0) 253:0    0   20G  0 lvm  /
 ├─vg0-swap (dm-1) 253:1    0    2G  0 lvm  [SWAP]
 ├─vg0-usr (dm-2)  253:2    0   10G  0 lvm  /usr
 └─vg0-var (dm-3)  253:3    0   20G  0 lvm  /var
sdb                   8:16   0   20G  0 disk
├─sdb1                8:17   0  1.9G  0 part
└─sdb2                8:18   0  1.9G  0 part

查看设备信息blkid

[[email protected] ~]# blkid
/dev/sda1: UUID="a4acde25-491e-425e-9a3c-3ccc995ee4c4" TYPE="ext4"
/dev/sda2: UUID="qivYdT-3t0K-JdU2-1afU-lZGG-NvNt-22lYE1" TYPE="LVM2_member"
/dev/mapper/vg0-root: UUID="e5ea11e5-157f-42b2-aba1-d92ff6002af3" TYPE="ext4"
/dev/mapper/vg0-swap: UUID="c30b0464-2b30-45ca-ac65-79baa79af17b" TYPE="swap"
/dev/mapper/vg0-usr: UUID="16ebdfae-1ddd-4841-9415-ea105add7857" TYPE="ext4"
/dev/mapper/vg0-var: UUID="6d6cc476-2c4f-40a9-9e8b-b9c1f90c6fe4" TYPE="ext4"


本文出自 “家住海边喜欢浪” 博客,请务必保留此出处http://zhang789.blog.51cto.com/11045979/1847232

以上是关于Linux 磁盘分区详解的主要内容,如果未能解决你的问题,请参考以下文章

Linux磁盘分区与LVM详解

20磁盘管理—linux磁盘管理详解(分区)

Linux基础篇——Linux磁盘操作(磁盘基础知识分类分区挂载卸载扩容)详解

linux下磁盘分区详解

linux磁盘分区详解

Linux系统之dd命令详解