一块磁盘可以分为多个分区(partition),如window的C、D、E盘一样。linu系统是安装在磁盘上,在linux中设备都是以文件类型存在。
个人计算机常见的磁盘接口有两种,分别是IDE和SATA:
IDE | Master | slave |
---|---|---|
IDE1(Primary) | /dev/hda | /dev/hdb |
IDE2(Secondary) | /dev/hdc | /dev/hdd |
磁盘由盘片、机械手臂、磁头和主马达组成。而对于每个盘片又可以细分出扇区(Sector)、柱面(Cylinder)两个单位。
盘面
硬盘一般会有一个或多个盘片,每个盘片可以有两个面(Side),即第1个盘片的正面称为0面,反面称为1面;第2个盘片的正面称为2面,反面称为3面…依次类推。每个盘面对应一个磁头(head)用于读写数据。第一个盘面的正面的磁头称为0磁头,背面称为1磁头;第二个盘片正面的磁头称为2磁头,背面称为3磁头,以此类推。盘面数和磁头数是相等的。关机时磁头停留在盘片启停区,开机时磁头“飞行”在磁盘片上方。为了避免磁盘和磁头损坏,建议不要强制关机。
磁道
每个盘片的每个盘面被划分成多个狭窄的同心圆环,数据就是存储在这样的同心圆环上,我们将这样的圆环称为磁道(Track),每个盘面可以划分多个磁道。关机时磁头停留在硬盘的着陆区(Landing Zone),这个着陆区以前是位于离盘心最近的区域,不存放任何数据。
在每个盘面的最外圈,离盘心最远的地方是“0”磁道,向盘心方向依次增长为1磁道,2磁道,等等。硬盘数据的存放就是从最外圈开始
扇区
每个磁道划分成若干弧段,每段称为一个扇区(Sector)。扇区是硬盘上存储的物理单位,每扇区大小是512字节,大小不可改变。
柱面
柱面其实是我们抽象出来的一个逻辑概念,不同面上相同磁道编号则组成了一个圆柱面,即所称的柱面(Cylinder)。这里要注意,硬盘数据的读写是按柱面进行,即磁头读写数据时首先在同一柱面内从0磁头开始进行操作,依次向下在同一柱面的不同盘面(即磁头上)进行操作,只有在同一柱面所有的磁头全部读写完毕后磁头才转移到下一柱面,因为选取磁头只需通过电子切换即可,而选取柱面则必须通过机械切换。电子切换比从在机械上磁头向邻近磁道移动快得多。因此,数据的读写按柱面进行,而不按盘面进行。读写数据都是按照这种方式进行,尽可能提高了硬盘读写效率。
簇
将物理相邻的若干个扇区称为了一个簇。
容量计算公式:
硬盘容量=盘面数×柱面数×扇区数×512字节
现代硬盘寻道都是采用CHS(Cylinder Head Sector)的方式,硬盘读取数据时,读写磁头沿径向移动,移到要读取的扇区所在磁道的上方,这段时间称为寻道时间(seek time)。因读写磁头的起始位置与目标位置之间的距离不同,寻道时间也不同。目前硬盘一般为2到30毫秒,平均约为9毫秒。磁头到达指定磁道后,然后通过盘片的旋转,使得要读取的扇区转到读写磁头的下方,这段时间称为旋转延迟时间(rotational latencytime)。
磁盘上的第一个扇区特别主要,它记录两个重要的信息:
1. 主引导分区(Master Boot Record,MBR)。可以安装引导加载程序的地方,有446bytes。MBR是系统开机的时候会主动去读取这个区块的内容,这样系统才会知道你的程序放在哪里且该如何开机。
2. 分区表(partition table):记录整块硬盘分区的状态,有64bytes。
第一扇区结构如下:
分区表只有64bytes,最多能容纳4个分区记录,这四个分区被称为主(Primary)和扩展(Extended)分区。分区的最小单位是柱面,也是文件系统的最小单位。分区表记录了每个分区起始和结束的柱面号码。为什么要进行磁盘分区呢?有以下好处:
1. 数据的安全性。对某个分区数据重整时不影响其他分区。
2. 系统性能。数据一般存放在同一个分区中,使得数据分布更加集中,有助于数据读取的速度和性能。
虽然分区表只能分配4个分区,但可以利用扩展分区使额外的扇区来记录分区信息,扩展分区本身不能被格式化。从扩展分区切出来的分区叫做逻辑分区。如图:
上述分区在linux系统中文件名分别为:
逻辑分区从5开始,前面的4个号码都是保留给主分区和扩展分区用。分区还具有以下特性:
挂载是利用一个目录当成进入点,将磁盘分区的数据放置在该目录下,也就是说进入该目录就可以读取该分区的意思。这个进入点的目录就称为”挂载点”
例如 partion1 挂载在根目录上,partion2挂载在/home,意味着/home下数据都存放在partion2上,其他数据都放在partion1上。
最简单的分区方法就是仅分出根目录和内存交换空间(/ & swap)即可。但是这样的分区不保险,如果任何一个细节坏掉(例如坏轨的产生),你的根目录将可能整个损毁。
分多个区有以下几个目的:
建议挂载的几大目录:
目录 | 说明 | 建议大小 |
---|---|---|
/ | 根目录,唯一必须挂载的目录。 | 10~15G |
swap | 交换分区,可能不是必须的。 | 一般为内存2倍,最大指定2G即可 |
/home | 用户目录,存放用户文件,是读写很频繁的一个目录。最好分配一个分区 | 最大的剩余空间 |
/usr | 应用程序目录。大部分的软件都安装在这里,如果您计划安装许多软件,建议也给它分配一个分区 | 最大的剩余空间的一半 |
/var | 包含系统运行时要改变的数据。通常这些数据所在的目录的大小是要经常变化的,系统日志记录也在/var/log下。一般多用户系统或者网络服务器要建立这个分区,设立这个分区,对系统日志的维护很有帮助。 | 一般设置2-3G大小 |
/boot | 包含了操作系统的内核和在启动系统过程中所要用到的文件。 | 100M左右 |
/tmp | 临时文件,方便加载ISO镜像文件使用,对于多用户系统或者网络服务器来也有独立挂载的必要。临时文件目录,也是最常出现问题的目录之一。 | 一般设置1-5G |
系统安装完成之后,有时候因为硬盘容量不够等原因会新增一些新的硬盘。那么添加新的硬盘之后应该做些什么?
1. 对磁盘进行分区,以新建可用的分区
2. 对该分区进行格式化,以创建系统可用的文件系统
3. 可对刚新建的文件系统进行检验
4. 创建挂载点,挂载新硬盘
df -h
首先查看当前硬盘使用情况,看看哪些地方需要增加存储容量。
虽然此刻各目录还有足够的空间,但考虑/home和/usr 后续还有一些新增数据。因此确定新增硬盘用于挂载到/home和/usr上。
fdisk -l
命令的作用是列出当前系统中所有硬盘设备及其分区的信息(fdisk只有root才能执行)。新的硬盘设备还未进行初始化,没有包含有效的分区信息。/dev/sda1、/dev/sda2、/dev/sda3是已经存在的硬盘。/dev/sdb 是新增的硬盘。
Device:分区的设备文件名称。
Boot:是否是引导分区,是,则有“*”标识。
Start:该分区在硬盘中的起始位置(柱面数)。
End:该分区在硬盘中的结束位置(柱面数)。
Blocks:分区的大小,以Blocks(块)为单位,默认的块大小为1024字节。
Id:分区类型的ID标记号,对于ext3分区为83,LVM分区为8e。
System:分区类型。
fdisk /dev/sdb #对 sdb 进行操作
fdisk交互命令:
命令 | 说明 |
---|---|
a | 设置可引导标记 |
b | 编辑bsd磁盘标签 |
c | 设置Dos操作系统兼容标记 |
d | 删除一个分区 |
l | 显示已知的文件系统类型,82为Linux swap分区,83为Linux分区 |
m | 显示帮助菜单 |
n | 新建分区 |
o | 建立空白的DOS分区表 |
p | 列出当前磁盘的分区表信息 |
q | 不保存退出 |
s | 新建空白SUN磁盘标签 |
t | 改变一个分区的系统ID |
u | 改变显示记录单位 |
v | 验证分区表 |
w | 保存退出 |
x | 附加功能 |
根据以上命令,我们可以通过以下指令进行分区。
新增分区过程:
1. fdisk /dev/sdb # /dev/sdb是新增的硬盘
2. n: 创建分区,这时候会让你选择一个分区数字,比如1
3. w或q: w是保存退出,这个需要谨慎使用,后果自负。q是不保存退出,练习时可以用。
设置分配好的分区,输入w保存退出。如果这时提示要重启才能生效,因为分区表被占用无法重新取得分区表信息。如果此刻不想重启又想让其生效,可以使用下面命令:
partprobe #强制让内核重新找一次分区表
注:root在进行磁盘分区的时候,最好是在单用户维护模式下比较安全。
fdisk没有办法处理大于2TB以上的磁盘分区
1)查看/home的文件格式
df -hT
2)格式化分区
mkfs -t ext4 /dev/sdb1
如果需要在创建文件系统的时候指定系统的卷标(label)、block的大小以及inode的数量,那么需要使用mkfs2命令
。
mkfs2 [-b block大小] [-i block大小(一个inode多少容量)] [-L 卷标] [-cj] 设备
-b: 可以设置每个block大小。目前支持1024,2048,4096
-i: 多少容量给予一个inode
-c:磁盘错误检查,下达一个-c进行快速读取测试。下达两次-c -c,会测试读写。
-L: 卷标名称
-j: 成为EXT3,不加为EXT2
badblocks -[svw] 设备名称
-s: 在屏幕中列出进度
-v: 可以在屏幕上看到进度
-w: 使用写入的方式来测试,建议不要使用此参数,尤其已有文件时。
挂载前需要注意一下事情:
如果直接将新的分区,如 “/dev/sdb1”挂载到某个目录下,如 “/home”下,则会导致 “/home” 目录以前的全部文件被覆盖,但并未消失。且不会将此前的目录容量加上,这会导致严重的问题。
>mount /dev/sdb1 /mnt
>cp -Rp /home/* /mnt #R递归负责,p保持复制的权限,如果没有这个,到时后/home目录下的某文件夹的所有者和所属组都是 root,没有办法切换到此用户。
>rm -rf /home #此处可能会用到 lsof 命令 --> lsof /home
>umount /mnt
>mount /dev/sdb1 /home
将此写进 /etc/fstab 配置文件中,让它开启自读取
>vi /etc/fstab
/dev/sdb1 /home ext4 defaults 0 0
第一字段:设备名或设备卷标名。
第二字段:文件系统的挂载点目录的位置。
第三字段:文件系统类型,如ext3、swap等。
第四字段:挂载参数,即mount命令“-o”选项后可使用的参数,如defaults、rw等。
第五字段:表示文件系统是否需要dump备份,一般设为1时表示需要,设为0时将被dump所忽略。
第六字段:该数字用于决定在系统启动时进行磁盘检查的顺序,0表示不进行检查,1表示优先检查,2表示其次检查。对于根分区应设为1,其他分区设为2.
系统文件/etc/fstab是系统自动挂载文件,所以不能写错,一旦写错可能导致系统直接崩溃。所以我们在保存/etc/fstab文件之后,我们必须使用命令mount -a自动实现挂载
mount -a #依据配置文件/etc/fstab的内容,自动挂载
mount -o remount,rw / # /etc/fstab文件修复
如果在安装系统的时候没有分配swap,为了应付物理内存不足的情况下造成的内存扩展记录,可以构建swap在硬盘上暂时存放内存中的信息。构建步骤:
1. 分区:利用fdisk分出一个分区作为swap.
2. 格式化:利用“mkswap 设备文件名”格式化一个swap。
3. 使用:将该swap启动,“swapon 设备文件名”
4. 查看:通过free查看内存状态。
unmount [-fn] 设备名或挂载点
-f: 强制卸载
-n: 不更新 /etc/mtab的情况下卸载。filesystem的挂载是记录到/etc/mtab与/proc/mounts这两个档案中的。每次我们在更动filesystem的挂载时,也会同时更动这两个档案。参考[/etc/mtab和/proc/mounts的区别]
e2label 设备名称 新的label名称
[1] Linux 磁盘分区
[2] 硬盘的存储原理和内部架构
[3] Linux 安装分区设置 分区大小 功能
[4] Linux系统安装时分区的选择
[5] 安装Linux前的规划
[6] 玩转 Linux 之:磁盘分区、挂载知多少?
[7] 给Linux新增硬盘之后
[8] 《鸟哥私房菜》磁盘的分区、格式化、检验与挂载
原文:https://www.cnblogs.com/migrantworkers/p/9162642.html