【硬盘的分类】
硬盘是计算机主要的存储媒介之一,由一个或者多个铝制或者玻璃制的碟片组成。碟片外覆盖有铁磁性材料。
硬盘有固态硬盘(SSD 盘,新式硬盘)、机械硬盘(HDD 传统硬盘)、混合硬盘(HHD 一块基于传统机械硬盘诞生出来的新硬盘)。SSD采用闪存颗粒来存储,HDD采用磁性碟片来存储,混合硬盘(HHD: Hybrid Hard Disk)是把磁性硬盘和闪存集成到一起的一种硬盘。绝大多数硬盘都是固定硬盘,被永久性地密封固定在硬盘驱动器中
【硬盘的结构】
head:磁头
用来读取硬盘的数据
track:磁道
当磁盘旋转时,磁头若保持在一个位置上,则每个磁头都会在磁盘表面划出一个圆形轨迹,这些圆形轨迹就叫做磁道(Track)
sector:扇区
磁盘上的每个磁道被等分为若干个弧段,这些弧段便是硬盘的扇区(Sector)。硬盘的第一个扇区,叫做引导扇区
cylinder: 柱面
在有多个盘片构成的盘组中,由不同盘片的面,但处于同一半径圆的多个磁道组成的一个圆柱面(Cylinder)
运行原理:盘片固定在旋转轴上,马达带动轴进行旋转,机械臂上装有磁头,磁头悬浮在盘面上,用来读取盘片上的数据,机械臂可以伸缩来进行寻道。
【扇区的划分】
将每一个磁道按512个字节为单位划分为等分,叫做扇区的划分;在一些硬盘的参数列表上通常可以看到描述每个磁道的扇区数的参数,它通常用一个范围表示,例如373~746,这表示,最外圈的磁道有746个扇区,最里面的磁道有373个扇区,因此可以算出磁道的容量分别是从186.5KB到373KB。
磁盘的分区时根据柱面来进行划分的。每个盘面上一个柱面只能属于一个分区,而且由外向内多个柱面组个成一个分区来使用,因此越靠外的柱面其读写速度越高,这也证实越靠近外侧的分区其读写速度越快的原因。通常我们将每个盘面最外侧的柱面划分为系统分区。
一块硬盘就是一个存储空间,分区只是外部认为的划分行为,这个分区信息是没办法保存在分区内部的某块空间上面的,就相当于一个人不可能揪着自己的头发把自己提起来一样,所以又这么一个特殊的结构设计。在硬盘之上有一块0磁道0扇区是被预留出来的,它不属于任何分区,称之为MBR,即用来存储MBR的一段空间。
该扇区大小为512字节,专门用来存储Master Boot Record 主引导记录,其中又被分为三部分:
446bytes:boot loader
64bytes:分区表,其中每16bytes 标识一个分区,所以一块硬盘最多拥有四个主分区。
2bytes: 55AA
下面就来介绍重点了:
lsblk :列出块设备,用这个命令可以列出当前有哪些分区,不过lsblk 并不是实时的更新,我们可以使用partprobe来重新设置内存中的内核分区表版本
创建分区命令:
fdisk 创建MBR分区
gdisk 创建GPT分区(支持128个分区)
parted 高级分区操作
fdisk -l /dev/sd# 查看硬盘分区信息
fdisk /dev/sd# 进行一个交互式分区界面
选项 | 注释 |
---|---|
m | 查看帮助 |
n | 建立分区 |
d | 删除分区 |
p | 显示分区信息 |
t | 转换分区类型 |
L | 查看分区类型 |
o | 重建分区表 |
v | 验证分区表,显示剩余没有被分区划分的扇区数量 |
g | 创建GPT格式的分区(centos7) |
u | 切换显示的单位,使用扇区数或者柱面数显示 |
q | 退出不保存 |
w | 退出并保存,不保存,所有的修改都不生效 |
[root@centos6 ~]# fdisk /dev/sdc --------> 对/dev/sdc 进行分区
Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel --------> 进入交互式分区
Building a new DOS disklabel with disk identifier 0x2ef1b648.
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): m --------> 查看帮助
Command action
a toggle a bootable flag
b edit bsd disklabel
c toggle the dos compatibility flag
d delete a partition
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)
Command (m for help): n --------> 创建新分区
Command action
e extended
p primary partition (1-4)
p
Partition number (1-4): 1
First cylinder (1-13054, default 1):
Using default value 1
Last cylinder, +cylinders or +size{K,M,G} (1-13054, default 13054): +2G
Command (m for help): w --------> 保存退出
The partition table has been altered!
Calling ioctl() to re-read partition table.
Syncing disks.
[root@centos6 ~]# fdisk -l /dev/sdc --------> 查看刚才的分区是否成功
Disk /dev/sdc: 107.4 GB, 107374182400 bytes
255 heads, 63 sectors/track, 13054 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: 0x2ef1b648
Device Boot Start End Blocks Id System
/dev/sdc1 1 262 2104483+ 83 Linux
gdisk 分区方式与fdisk 基本相似,这里不做演示。
parted 命令是实时生效的,所以使用它操作时需小心。parted 可以直接跟参数来进行分区。也可以使用交互式方法来进行分区。
[root@centos6 ~]# parted /dev/sdd
GNU Parted 2.1
Using /dev/sdd
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) mkpart --------> 创建新分区
Partition type? primary/extended? primary --------> 设置为主分区
File system type? [ext2]? ext2 --------> 设置文件系统类型
Start? 0 --------> 设置开始点
End? 500M --------> 设置结束大小
Warning: The resulting partition is not properly aligned for best performance.
Ignore/Cancel? i
(parted) print --------> 查看分区信息
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdd: 53.7GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Number Start End Size Type File system Flags
1 512B 500MB 500MB primary --------> 刚才的操作成功
(parted) q --------> 退出
Information: You may need to update /etc/fstab.
[root@centos6 ~]# fdisk -l /dev/sdd
Disk /dev/sdd: 53.7 GB, 53687091200 bytes
201 heads, 63 sectors/track, 8280 cylinders
Units = cylinders of 12663 * 512 = 6483456 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00055ba2
Device Boot Start End Blocks Id System
/dev/sdd1 1 78 488281 83 Linux
同样的,直接在命令后加参数也是一样的效果:
【文件系统】
简单来说,文件系统是操作系统用于明确存储设备或分区上的文件的方法和数据结构;即在存储设备上组织文件的方法。它负责文件存储并对存入的文件进行保护和检索。具体地说,它负责为用户建立文件,存入、读出、修改、转储文件,控制文件的存取,安全控制,日志,压缩,加密等。
根据它是否支持日志功能,我们可以将他们简单分为日志型文件系统和非日志型文件系统。日志型文件系统支持ext3, ext4, xfs等格式;非日志型文件系统支持ext2, vfat等格式。如果根据文件系统的组成部分,也可以分为内核中的模块(支持ext4, xfs, vfat等)和用户空间的管理工具(支持mkfs.ext4, mkfs.xfs,mkfs.vfat等)。
cat /proc/filesystems
可以查看系统都支持哪些文件系统。
在对硬盘进行分区以后,这些分区时不能直接拿来使用的,需要格式化为文件系统后才能做创建删除文件等其他操作。
mkfs(make file system) 创建文件系统
eg:mkfs -t ext2=mkfs.ext2=mke2fs -t ext2 (这些对于ext系列文件都是通用的)
对于ext系列文件系统有个专用的管理工具:mke2fs
选项 | 注释 |
---|---|
-t | 指定文件系统 |
-b | 指定块大小 |
-L | 设置卷标 |
-j | 设置文件系统为ext3 |
-i # | 每多少字节给创建一个inode,此字节数不应该小于块大小 |
-N # | 直接指定可用的inode号 |
-m # | 预留空间百分比 ,默认为5 |
-O | 指定分区特性 |
mke2fs的命令选项所做的操作,可以使用tune2fs 查看
tune2fs 命令可以重新设定ext系列文件系统可调整参数的值。
选项 | 注释 |
---|---|
-l | 查看指定文件系统超级块信息;super block |
-L ‘LABEL’ | 修改卷标 |
-m # | 修预留给管理员的空间百分比 |
-j | 将ext2升级为ext3 |
-O | 文件系统属性启用或禁用, –O ^has_journal(禁用) |
-o | 调整文件系统的默认挂载选项,–o ^acl(禁用) |
-U UUID | 修改UUID号 |
补充:超级块的作用是存储文件系统的大小、有多少是空的和已经填满的占多少,以及它们各自的总数和其他诸如此类的信息。要使用一个分区来进行数据访问,那么第一个要访问的就是超级块;如果超级块坏了,那这个分区也无用了。
如果因为超级块出现问题而无法格式化文件洗头膏或者做其他操作,我们可以使用fsck、e2fsck 工具来进行修复。注意:必须先卸载在进行修复。
选项 | 注释 |
---|---|
-t | 指定文件系统 |
-f | 强制修复 |
-y | 非交互式 |
-r | 交互式 |
-p | 自动修复 |
bklid 查看指定块设备的属性信息
其中的LABEL称为块设备的卷标名。我们可以通过卷标名和UUID查询设备信息。使用tune2fs 可以看到分区的卷标名。
使用e2label 可以对ext系列文件系统设置卷标。
[root@localhost ~]# blkid
/dev/sda1: UUID="b8871dba-d91f-4038-8cba-9dc5bb6f9666" TYPE="xfs"
/dev/sda2: UUID="ae94d939-ed8e-4427-9159-9c9547838c2e" TYPE="xfs"
/dev/sda3: UUID="66fb5ede-106b-4352-bba6-1223feec8cb6" TYPE="xfs"
/dev/sda5: UUID="dfa334ac-1a09-4a87-a8fa-2a6035406e56" TYPE="swap"
/dev/sdb1: LABEL="first" UUID="609cf9d4-1bad-4929-8448-9fb20ee176f2" TYPE="ext4"
/dev/sdb2: LABEL="haha" UUID="d4dde6a5-418a-4e71-976c-edf3edd2080b" TYPE="ext2"
/dev/sdb3: UUID="6eeeb972-35b0-437f-8463-a5985b281cda" TYPE="xfs"
/dev/sr0: UUID="2016-12-05-13-52-39-00" LABEL="CentOS 7 x86_64" TYPE="iso9660" PTTYPE="dos"
[root@localhost ~]# blkid -U "609cf9d4-1bad-4929-8448-9fb20ee176f2"
/dev/sdb1
[root@localhost ~]# blkid -L "609cf9d4-1bad-4929-8448-9fb20ee176f2"^C
[root@localhost ~]# blkid -L first
/dev/sdb1
【挂载】
磁盘分区要想被使用必须先挂载,所谓挂载是指将额外的分区与根文件系统上的某目录建立关联关系的过程。推荐挂载到一个空目录。如果该目录有文件,则目录中的原文件将会被隐藏。
格式:mount device mount-point
device :所要挂载的磁盘分区
mount-point:另一个文件系统的访问入口
注:挂载点必须事先存在。
umount 表示卸载,卸载时只需要指定其中一个设备即可。
常用的挂载选项:
选项 | 注释 |
---|---|
-t | 指定文件系统类型(mount命令自动识别文件系统类型) |
-r | 只读挂载 |
-w | 读写挂载 |
-n | 隐藏挂载信息不显示,但在/proc/mounts可以查到 |
-a | 读取/etc/fstab,挂载其中没有挂载的设备 |
-L ‘LABEL’ | 以卷标指定要挂载的设备 |
-U ‘UUID’ | 以UUID指定要挂载的设备 |
-B –bind | 目录挂目录 |
[root@centos6 ~]# mount -r /dev/sdc1 /app/sdc1
[root@centos6 ~]# cd /app/
[root@centos6 app]# ls
lost+found sdc1 sdc2 sdc3
[root@centos6 app]# cd sdc1
[root@centos6 sdc1]# ls
lost+found
[root@centos6 sdc1]# touch file
touch: cannot touch `file': Read-only file system -------->设置成功只读挂载
[root@centos6 sdc1]# umount /dev/sdc1
umount: /app/sdc1: device is busy. -------->当前在挂载目录下,所以卸载失败。
(In some cases useful info about processes that use
the device is found by lsof(8) or fuser(1))
[root@centos6 sdc1]# cd
[root@centos6 ~]# umount /dev/sdc1 -------->退出后卸载成功
[root@centos6 ~]#
[root@centos6 ~]# blkid
/dev/sda2: UUID="b05406a5-9017-451f-a424-8102f30911f7" TYPE="ext4"
/dev/sda1: UUID="7616ec53-8288-477e-8a3f-afdc62df660b" TYPE="ext4"
/dev/sda3: UUID="44f4471d-f855-4012-93b2-079e94a55053" TYPE="ext4"
/dev/sda5: UUID="e458f42a-c2f8-4571-b6e8-ae8ce5f5330f" TYPE="swap"
/dev/sr0: LABEL="CentOS_6.9_Final" TYPE="iso9660"
/dev/sdc1: UUID="ffd854f0-db32-4ec8-a6eb-f7d0bdfab3f1" TYPE="ext2" LABEL="c1"
/dev/sdc2: UUID="d775309b-3cde-4a93-b424-c6138795815f" TYPE="ext4" LABEL="c2"
/dev/sdc3: UUID="2cf94dc5-04b0-43c6-b3ec-b8a799f8c86b" TYPE="xfs"
[root@centos6 ~]# mount -L c1 /app/sdc1 -------->使用label挂载
[root@centos6 ~]# mount -U d775309b-3cde-4a93-b424-c6138795815f /app/sdc2 -------->使用UUID 挂载
[root@centos6 ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sdb 8:16 0 150G 0 disk
sda 8:0 0 200G 0 disk
├─sda1 8:1 0 1G 0 part /boot
├─sda2 8:2 0 50G 0 part /
├─sda3 8:3 0 50G 0 part /app
├─sda4 8:4 0 1K 0 part
└─sda5 8:5 0 4G 0 part [SWAP]
sdc 8:32 0 100G 0 disk
├─sdc1 8:33 0 2G 0 part /app/sdc1 -------->挂载成功
├─sdc2 8:34 0 1G 0 part /app/sdc2
└─sdc3 8:35 0 407.9M 0 part
sdd 8:48 0 50G 0 disk
└─sdd1 8:49 0 190M 0 part
sr0 11:0 1 3.7G 0 rom /media/CentOS_6.9_Final