Linux下硬盘分区与根文件系统

in Linux with 0 comment

linux硬盘分区

用linux,就一定要用linux的方式去思维, 用习惯windows中C盘,D盘,E盘的的同学一开始会不习惯,可能会有疑惑我的这些盘都去哪了?

其实我们可以拿windows的文件系统来类比linux系统的根文件系统,下边我们就来了解一下。

要了解这些东西让我们首先来了解一下硬盘的相关知识:

  1. 硬盘格式: 我们在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类型接口只能应一个设备,没有主从之分

  1. 硬盘分区: 从市场上买来一块硬盘后想让其工作第一件事情就是分区,并进行格式化,因为数据都是存储到分区中的,没有进行分区的硬盘是不能被 linux [windows一样]系统识别的.

关于硬盘的构造有几点说明

  1. 硬盘的最小组成物理单位是sector 扇区 一个sector是512Byte
  2. 多个sector组成磁轨(track)
  3. 同一个磁轨(想像成立体的)组成磁柱 (cylinder)
  4. 开始磁柱与结束磁柱之间是partition即分区,因此cylinder是分区的最小单位
  5. 档案存储的最小单位是逻辑区块(Block),逻辑区块(Block)包括inode table与block area两个部分,inode放属性,而block放数据
  6. 一个逻辑区块(Block)仅能容纳一个档案
  7. 一个逻辑区块的容量为2的n次方倍sector
  8. 一个partition所能容纳的文档数量跟inode数量有关
  9. 分区的时候会让指定sector(从多少到多少)即是指定这个partition多大
  10. 格式化的时候会指定inode的大小与block的大小,不过都有一个默认值,inode是128字节,block有1024,2048,4096 字节等
  11. 一个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建好了

这样我们就可以重复建立下去了,直到用完整个硬盘空间

注意:

  1. linux系统上一个硬盘必须要建立一个以上的主分区,但主分区数量不能超过3个,如果是4个的话分区表占满了剩下的空间就不能用了

  2. 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):

下边用一张图来表示硬盘分区

image

  1. 硬盘格式化
// 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文件系统)

  1. 删除分区

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

  1. 挂载分区

分区格式化为某种格式[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看是否有错误
  1. 实际操作 [给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:\了,这点类比很好.

评论