linux硬盘分区
用linux,就一定要用linux的方式去思维, 用习惯windows中C盘,D盘,E盘的的同学一开始会不习惯,可能会有疑惑我的这些盘都去哪了?
其实我们可以拿windows的文件系统来类比linux系统的根文件系统,下边我们就来了解一下。
要了解这些东西让我们首先来了解一下硬盘的相关知识:
- 硬盘格式: 我们在linux下用fdisk -l的时候会发现
/dev/hda
,/dev/hdb
,/dev/sda
这些设备名,这里的hda/hdb/sda
表示什么呢?
这就要从硬盘的类型,即在主板上的插槽类型来说了.
在linux下一切设备皆是文件
IDE磁盘的设备文件采用 /dev/hdx来命名,IDE磁盘分区采用 /dev/hdx[y]
来命名,其中x表示第几块磁盘(a表示第一块,b表示第二块),y表示分区号(1开始,2 3 4 ...)
而SCSI设备在linux下就是/dev/sda
,分区就是/dev/sda1
..这种表示了。
/dev/hda/表示第一个IDE接口的第一个硬盘设备(master)
/dev/hdb/表示第一个IDE接口的第二个硬盘设备(slave)
/dev/hdc和/dev/hdd则是第二个IDE接口上的master和slave设备
由此可以看到一个IDE接口上最多两个设备,一个主设备,一个从设备
注意:SCSI类型接口只能应一个设备,没有主从之分
- 硬盘分区: 从市场上买来一块硬盘后想让其工作第一件事情就是分区,并进行格式化,因为数据都是存储到分区中的,没有进行分区的硬盘是不能被
linux
[windows一样]系统识别的.
关于硬盘的构造有几点说明
- 硬盘的最小组成物理单位是sector 扇区 一个sector是512Byte
- 多个sector组成磁轨(track)
- 同一个磁轨(想像成立体的)组成磁柱 (cylinder)
- 开始磁柱与结束磁柱之间是partition即分区,因此cylinder是分区的最小单位
- 档案存储的最小单位是逻辑区块(Block),逻辑区块(Block)包括inode table与block area两个部分,inode放属性,而block放数据
- 一个逻辑区块(Block)仅能容纳一个档案
- 一个逻辑区块的容量为2的n次方倍sector
- 一个partition所能容纳的文档数量跟inode数量有关
- 分区的时候会让指定sector(从多少到多少)即是指定这个partition多大
- 格式化的时候会指定inode的大小与block的大小,不过都有一个默认值,inode是128字节,block有1024,2048,4096 字节等
- 一个partition分区在逻辑上分为多个Block Group,每个group会包含若干个inode tables和block areas用来放数据
linux下进行分区格式化命令
拿到新硬盘后用 fdisk -l
命令用来查看硬盘信息,新加的硬盘如果检测不到需要重启系统
以DO VPS为例:
fdisk -l
打印类似 [注: Disk表示硬盘,Device表示分区]
Disk /dev/vda: 20 GiB, 21474836480 bytes, 41943040 sectors
Device Start End Sectors Size Type
/dev/vda1 4096 41943006 41938911 20G Linux filesystem
/dev/vda15 2048 4095 2048 1M BIOS boot
Disk /dev/sda: 20 GiB, 21474836480 bytes, 41943040 sectors
可以看到/dev/sda表示新增的一块SCSI接口的硬盘, 自带的第一块硬盘/dev/vda
则表示当前用的是SSD固态硬盘,其有两个分区
下边对这块硬盘/dev/sda分区及格式化操作
fdisk /dev/sda
打印
Command (m for help): n # 新分区
p primary (0 primary,0 extended 4 free) #主分区
e extended (container for logical partitions) #扩展分区
select (default p): e #这里选e扩展分区
Partition number (1-4, default 1 ):1 #输入1,只能有一个扩展分区
Command (m for help): n
Partition type
p primary (0 primary, 0 extended, 4 free)
e extended (container for logical partitions)
Select (default p): e
Partition number (1-4, default 1):
First sector (2048-209715199, default 2048):
Last sector, +sectors or +size{K,M,G,T,P} (2048-209715199, default 209715199): +20G
Created a new partition 1 of type 'Extended' and of size 20 GiB.
Command (m for help):w #保存到分区表
打印:The partition table has been altered
# fdisk /dev/sda
Command (m for help): p
Disk /dev/sda: 100 GiB, 107374182400 bytes, 209715200 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
Disklabel type: dos
Disk identifier: 0x6c64183b
Device Boot Start End Sectors Size Id Type
/dev/sda1 2048 41945087 41943040 20G 5 Extended
此时可以看到一个扩展分区 /dev/sda1, 因为是分的扩展分区,扩展分区不能直接使用,必须再分为若干个逻辑分区才能使用
注意: 此时如果直接格式化的话是把建的唯一扩展分区也一并给格式化了,即整块硬盘被当作一个分区使用了,但实际上此时显示这个硬盘是没有分区的
fdisk /dev/sda
打印
Partition type
p primary (0 primary, 1 extended, 3 free)
l logical (numbered from 5)
Select (default p): l
Adding logical partition 5
First sector (4096-41945087, default 4096):
Last sector, +sectors or +size{K,M,G,T,P} (4096-41945087, default 41945087): +10G
Created a new partition 5 of type 'Linux' and of size 10 GiB.
此时因为已经建立了一个扩展分区,这里直接提示新建主分区或逻辑(logical)分区 ,logical分区默认从5开始[1-4被保留给主分区], 输入w保存
Device Boot Start End Sectors Size Id Type
/dev/sda1 2048 41945087 41943040 20G 5 Extended
/dev/sda5 4096 20975615 20971520 10G 83 Linux
此时可以看到已经有一个逻辑分区 /dev/sda5建好了
这样我们就可以重复建立下去了,直到用完整个硬盘空间
注意:
linux系统上一个硬盘必须要建立一个以上的主分区,但主分区数量不能超过3个,如果是4个的话分区表占满了剩下的空间就不能用了
linux系统上的一个硬盘可以没有扩展分区,有的话扩展分区只能有一个, 扩展分区不能用来挂载,只能进一步把扩展分区建成N个逻辑分区(logical),N最大为64,直到扩展分区的容量用完为止
当给一个硬盘增加三个主分区和一个逻辑分区后再增加的话会提示:All primary partitions are in use,只能再增加逻辑分区
Device Boot Start End Sectors Size Id Type
/dev/sda1 2048 41945087 41943040 20G 5 Extended
/dev/sda2 41945088 62916607 20971520 10G 83 Linux
/dev/sda3 62916608 85985279 23068672 11G 83 Linux
/dev/sda4 85985280 111151103 25165824 12G 83 Linux
/dev/sda5 4096 20975615 20971520 10G 83 Linux
/dev/sda6 20977664 25171967 4194304 2G 83 Linux
/dev/sda7 25174016 39854079 14680064 7G 83 Linux
Partition table entries are not in disk order.
Command (m for help): n
All primary partitions are in use.
Adding logical partition 8
First sector (39856128-41945087, default 39856128):
下边用一张图来表示硬盘分区
- 硬盘格式化
// ext2/ext3 格式
mke2fs [-bicLj] 装置名称
-b 设定每个block的大小,有1024 2048 4096三种
-i 每个inode多少容量
-c 检查硬盘错误
-c -c 进行读写检查,较慢
-L 接表头的名称,这个label在我们把partiontion挂载的时候很有用
-j mke2fs是针对ext2的,加上-j表示添加日志即是ext3格式
//其它系统档案格式
mkfs
> 格式化整块硬盘: mkfs -t ext4 /dev/sda (ext4文件系统)
> 格式化主分区: mkfs -t ext4 /dev/sda1 #假设sda1为主分区 (ext4文件系统)
> 格式化逻辑分区: mkfs -t ext4 /dev/sda5 (ext4文件系统)
注意: 扩展分区格式化的时候要注意,会把所有的逻辑分区都格式化 (ext4文件系统)
- 删除分区
fdisk /dev/sda
Device Boot Start End Sectors Size Id Type
/dev/sda1 2048 41945087 41943040 20G 5 Extended
/dev/sda5 4096 6295551 6291456 3G 83 Linux
/dev/sda6 6297600 12589055 6291456 3G 83 Linux
Command (m for help): d
Partition number (1,5,6, default 6): 1
Partition 1 has been deleted.
**注意:扩展分区删除后里边的所有逻辑分区都没有了**
**删除分区前要先umount, 即卸载分区 umount /dev/sda1 **
最快速的删除分区的方法是格式化整个硬盘 mkfs -t ext4 /dev/sda
- 挂载分区
分区格式化为某种格式[ext3,ext4...]后就可以挂载起来使用了
mount /dev/sda1 /opt/lampp/htdocs/addvolume
mount -a 可以依照 /etc/fstab 的参数内容将所有的磁盘给他重新挂上去
开机自动挂载
vi /etc/fstab [下边列之间加一个空格即可]
/dev/sda /opt/lampp/htdocs/addvolume ext4 defaults 1 2
第一列为partition名或label名
第二列为挂载点(目录)
第三列为filesystem
第四列defaults: rw[读写], SUID[允许suid存在],exec[可执行的],dev[允许建立装置档],auto[允许此 partition 被以 mount -a 自动挂载], nouser[除了root,其它人不能执行mount命令],async[异步写入到partition,效率高]
第五列为 dump 进行系统的备份操作,0、1、2 一般为2就可以
第六列为 fsck是否开机检查,0,1,2 ,一般为2即可 / 为1
一般修改完 /etc/fstab后运行一次mount -a看是否有错误
- 实际操作 [给VPS单独增加一块硬盘]
vps安装系统的时候是只分了一个主分区
最简单的就是直接把硬盘格式化,即整块硬盘分成一个区, 然后再挂载上
mkfs -t ext4 /dev/sda
mount /dev/sda /opt/lampp/htdocs/addvolume
Filesystem 1K-blocks Used Available Use% Mounted on
udev 242164 0 242164 0% /dev
tmpfs 50020 2904 47116 6% /run
/dev/vda1 20510568 1821924 17632772 10% /
tmpfs 250100 0 250100 0% /dev/shm
tmpfs 5120 0 5120 0% /run/lock
tmpfs 250100 0 250100 0% /sys/fs/cgroup
tmpfs 50020 0 50020 0% /run/user/0
*/dev/sda 103081248 61044 97760940 1% /opt/lampp/htdocs/addvolume*
根文件系统
盘符——是软件级的概念 分区——是硬件级的概念
当windows启动的时候,它会检测电脑已连接的所有硬盘上它能够识别的分区(NTFS、FAT32等),并自动为其分配盘符。这个“分配盘符”的过程,就是挂载(mount)过程(请一定记住这个mount),只不过这个过程完全不用你参与,windows认为所有的分区,不管三七二十一都应该挂上,让你尽情的用。
具体说就是,windows把第一分区关联到c:这个盘符,第二分区关联到d:这个盘符等等,这样当你想在第一分区存取数据的时候,只需要寻找c:就行了.
系统启动时,首先有一个分区被挂载到了/,可以理解为该分区被分配了/这个奇怪“盘符”(注意,在windows里,这个符号被用做命令参数引导符号,而反斜线\,英文backslash作为路径分割符,习惯不同而已,就像英国行车靠左一样,没啥可奇怪的)。
这个被挂载为/的分区,就叫做根分区(不管它是主分区还是逻辑分区),它从此开始在整儿linux系统里具有了特殊的地位,因为整儿电脑里的所有硬盘,包括其上的所有其他分区,不管是主分区、逻辑分区,都将以这个“根分区”为主干,开始构造linux大树,并最终成为这颗树上的一个分支或树叶。
整个linux的系统结构里,有且只有一个root(根分区),不可能有第二个(其实,任何一个分区,都可以挂载为/,windows分区也可以。只不过挂载根分区的目的是启动系统,如果/下面没有linux内核及其所需的系统文件的话,将无法引导系统而已
你的其他分区只能被继续挂载到/(根分区)下的某个目录里,比如“/mnt”或者“/media”或者“/什么什么”目录,看你喜欢喽。挂载好之后,当你向这个目录读写数据的时候,其实是在向被挂载到该目录的另一个分区读写数据。
多个分区在同一个时候只能被挂载到多个不同的目录,比如“/mnt/a”、“/media/123”或者“/home/anywhere”,任何一个处于/之下的目录,都可以用来作为挂载其他分区的“平台”,当然系统需要的目录可不要用哈,你自己新建你自己的用吧。
挂载好之后,你硬盘里的数据,就可以通过类似/path/to/anywhere这样的方式找到;如果没有挂载就找不到喽。
用一个庸俗的比喻来说,“/”相当于c:\,而“/etc、/bin、/sbin、/lib”这些目录大概相当于c:\windows和c:\program files,“/home”相当于c:\Documents and Settings,而当你把第二分区挂载到“/mnt/partition2”的时候,这个目录就相当于d:\了,这点类比很好.
本文由 dealdot <dealdot#163.com> 创作, Full Stack Developer @ DeepBlue
本文最后编辑时间为: Apr 9, 2017 at 17:43 pm
转载请注明来源