Linux磁盘管理
nanshan 2025-01-14 16:08 14 浏览 0 评论
1. 写在前面
- 在此强调一个 Linux 的核心机制就是一切皆文件。
- I/O Ports 即I/O 设备地址,用来标识硬件对应的设备地址,来让操作系统以及 cpu 使用。
- CPU 的核数不一定就是越多越好,由于CPU 协调之间的协调问题,可能性能不升反降。
2. 设备文件
关联至一个设备驱动程序,进而能够跟与之对应硬件设备进行通信
设备文件分类
- 块设备:block,存取单位”块”,磁盘
- 字符设备:char,存取单位”字符”,键盘
设备号码
- 主设备号:major number, 标识设备类型
- 次设备号:minor number, 标识同一类型下的不同设备
[root@localhost ~]# ll /dev/
total 0
# 10为主设备号标识相同的设备类型,175/235此设备标识不同的设备
crw-rw----. 1 root video 10, 175 3月 30 08:48 agpgart
crw-------. 1 root root 10, 235 3月 30 08:48 autofs
# 200标识这个单独的设备
drwxr-xr-x. 2 root root 200 3月 30 08:48 block
硬盘接口类型
接口速率而非硬件设备速率,同一个接口不同的硬盘速率不同
- 并行(实现数据串行工作,类似双向两车道,但是之间有数据干扰)
- IDE:133MB/s
- SCSI:640MB/s
- 串口(实现数据串行工作,类型单向四车道)
- SATA3:6Gbps(需要除以 8 来得到实际速率)
- SAS:6Gbps
- USB:480MB/s
- 单位(rpm): rotations per minute
磁盘设备的设备文件命名
命名格式:/dev/DEV_FILE
- IDE: /dev/hd
- SCSI, SATA, SAS, USB: /dev/sd
- 不同设备:a-z
/dev/sda, /dev/sdb, … - 同一设备上的不同分区:1,2, …
/dev/sda1, /dev/sda5, …
3. 机械式硬盘
机械硬盘主要由以下几部分组成:机械手臂(Boom),磁头(Head),转轴(Spindle),盘片(Platter)组成,在实际应用中又将盘片分成了磁道(Track),扇区(Sector)和柱面(Cylinder)。
机械手臂
- 机械手臂由控制电路控制,可以前后移动,在机械手臂的前端有磁头,机械手臂的作用就是,移动磁头,使磁头位于正确的位置上。
磁头
- 磁头由机械手臂控制在盘片上移动。读写硬盘时,磁头依靠磁盘的高速旋转引起的空气动力效应悬浮在盘面上,可以在极短的时间内精确定位到计算机指令指定的磁道上。
盘片
- 硬盘的存储介质,所有的信息都存储在这里,盘片分为单面盘片和双面盘片,单面盘片只能在一面进行存储,双面盘片能在两面进行存储。硬盘的盘片一般采用合金材料,多数为铝合金,盘面上涂着磁性材料。早期硬盘由于单碟容量低导致盘片较多,现代的硬盘盘片一般只有少数几片。硬盘一般会有一个或多个盘片,每个盘片可以有两个面(Side),即第 1 个盘片的正面称为 0 面,反面称为 1 面;第 2 个盘片的正面称为 2 面,反面称为 3 面…依次类推。每个盘面对应一个磁头(head)用于读写数据。第一个盘面的正面的磁头称为 0 磁头,背面称为 1 磁头;第二个盘片正面的磁头称为 2 磁头,背面称为 3 磁头,以此类推。盘面数和磁头数是相等的。
磁道
- 每个盘片的每个盘面被划分成多个狭窄的同心圆环,数据就是存储在这样的同心圆环上,我们将这样的圆环称为磁道(Track),每个盘面可以划分多个磁道。在每个盘面的最外圈,离盘心最远的地方是”0”磁道,向盘心方向依次增长为 1 磁道,2 磁道,等等。硬盘数据的存放就是从最外圈开始。
扇区
- 根据硬盘规格的不同,磁道数可以从几百到成千上万不等。每个磁道上可以存储数 KB 的数据,但计算机并不需要一次读写这么多数据。在这一这基础上,又把每个磁道划分成若干弧段,每段称为一个扇区(Sector)。扇区是硬盘上存储的物理单位,每个扇区可存储 128×2N 次方(N = 0,1,2,3)字节的数据。从 DOS 时代起,每扇区是 128×22 = 512 字节,现在已经成了业界不成文的规定,也没有哪个硬盘厂商试图去改变这种约定。也就是说即使计算机只需要硬盘上存储的某个字节,也须一次把这个字节所在的扇区中的全部 512 字节读入内存,再选择所需的那个字节。扇区的编号是从 1 开始,而不是 0,这一点需要注意。另外,硬盘在划分扇区时,和软盘是有一定区别的。软盘的一个磁道中,扇区号一般依次编排,如 1 号,2 号,3 号…以此类推。
Linux磁盘管理
- 在硬盘磁道中,扇区号是按照某个间隔跳跃着编排。比如,2 号扇区并不是 1 号扇区后的按顺序的第一个而是第八个,3 号扇区又是 2 号扇区后的按顺序的第八个,依此类推,这个”八”称为交叉因子。这个交叉因子的来历有必要详述一下,我们知道,数据读取经常需要按顺序读取一系列相邻的扇区(逻辑数据相邻)。如对磁道扇区按物理顺序进行编号,很有可能出现当磁头读取完第一个扇区后,由于盘片转速过快来不及读取下一个扇区,(要知道物理相邻扇区位置距离是极小的),必须等待转完一圈,这极大浪费了时间。所以就用交叉来解决这个问题。
柱面
- 柱面其实是我们抽象出来的一个逻辑概念,前面说过,离盘心最远的磁道为 0 磁道,依此往里为 1 磁道,2 磁道,3 磁道….,不同面上相同磁道编号则组成了一个圆柱面,即所称的柱面(Cylinder)。
簇
- 将物理相邻的若干个扇区称为了一个簇。操作系统读写磁盘的基本单位是扇区,而文件系统的基本单位是簇(Cluster)。在 Windows 下,随便找个几字节的文件,在其上面点击鼠标右键选择属性,看看实际大小与占用空间两项内容,如大小:15 字节 (15 字节), 占用空间:4.00 KB (4,096 字节)。这里的占用空间就是你机器分区的簇大小,因为再小的文件都会占用空间,逻辑基本单位是 4K,所以都会占用 4K。 簇一般有这几类大小 4K,8K,16K,32K,64K 等。簇越大存储性能越好,但空间浪费严重。簇越小性能相对越低,但空间利用率高。NTFS 格式的文件系统簇的大小为 4K。
4. 分区划分
4.1 BIOS
BIOS(Basic Input/Output System)
每一台普通的电脑都会有一个 BIOS,用于加载电脑最基本的程式码,担负着初始化硬件,检测硬件功能以及引导操作系统的任务。
- 0 磁道 0 扇区
在传统的系统上,当我们启动计算的时候,默认的最开始会读取0 磁道 0 扇区的数据,其是以512bytes 为单位来进行硬盘的分区划分,它不属于任何分区,用来标识我们创建的分区信息等。
- 格式
MBR(Master Boot Record): 指的是一个一段程序而非一个空间
- 446bytes: boot loader 主引导记录
- 64bytes: 分区表
- 16bytes: 标识一个分区
- 2bytes: 55AA用来标识结尾
实战演示:
# 首先使用 fdisk -l 确定MBR位置,标记 * 即为mbr所在分区
[root@localhost ~]# fdisk -l
Disk /dev/sda: 21.5 GB, 21474836480 bytes, 41943040 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
Disk label type: dos
Disk identifier: 0x00093397
Device Boot Start End Blocks Id System
/dev/sda1 * 2048 1026047 512000 83 Linux
/dev/sda2 1026048 41943039 20458496 8e Linux LVM
下面的省略了......
# 备份MBR
dd if=/dev/sda1 of=/root/mbr bs=512 count=1
# 恢复MBR:
dd if=/root/mbr of=/dev/sda1 bs=512 count=1
# 恢复分区表:
dd if=/root/mbr of=/dev/sda1 bs=512 skip=446 count=66
注:mbr大小512 所以bs=512 count=1 bs=512 skip=446 count=66 用来确定分区表在备份文件中的位置
# 查看 mbr 分区信息
[root@localhost ~]# hexdump -C mbr.txt
00000000 58 46 53 42 00 00 10 00 00 00 00 00 00 01 f4 00 |XFSB............|
00000010 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
00000020 46 74 a4 dd d2 48 40 cb a6 0e 3f 8f 32 c8 e0 2d |Ft...H@...?.2..-|
00000030 00 00 00 00 00 01 00 04 00 00 00 00 00 00 00 80 |................|
00000040 00 00 00 00 00 00 00 81 00 00 00 00 00 00 00 82 |................|
00000050 00 00 00 01 00 00 7d 00 00 00 00 04 00 00 00 00 |......}.........|
00000060 00 00 03 55 b4 b4 02 00 01 00 00 10 00 00 00 00 |...U............|
00000070 00 00 00 00 00 00 00 00 0c 09 08 04 0f 00 00 19 |................|
00000080 00 00 00 00 00 00 02 00 00 00 00 00 00 00 00 af |................|
00000090 00 00 00 00 00 01 44 98 00 00 00 00 00 00 00 00 |......D.........|
000000a0 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff |................|
000000b0 00 00 00 00 00 00 00 02 00 00 00 00 00 00 00 00 |................|
000000c0 00 00 00 00 00 00 00 01 00 00 00 8a 00 00 00 8a |................|
000000d0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
*
00000200
有一部分给缺失了
分区类型
- 最多 4 个主分区
- 3 主分区+1 扩展(N 个逻辑分区)
4.2 UEFI
UEFI(Unified Extensible Firmware Interface)
- 即”统一的可扩展固件接口”,是一种详细描述全新类型接口的标准,是适用于电脑的标准固件接口,旨在代替 BIOS(基本输入/输出系统)。
- 这种接口用于操作系统自动从预启动的操作环境,加载到一种操作系统上,从而达到开机程序化繁为简节省时间的目的。
- UEFI 抛去了传统 BIOS 需要长时间自检的问题,让硬件初始化以及引导系统变得简洁快速。
UEFI 的优点
- 通过保护预启动或预引导进程,抵御 bootkit 攻击,从而提高安全性。
- 缩短了启动时间和从休眠状态恢复的时间。
- 支持容量超过 2.2 TB 的驱动器。
- 支持 64 位的现代固件设备驱动程序,系统在启动过程中可以使用它们来对超过 172 亿 GB 的内存进行寻址。
- UEFI 硬件可与 BIOS 结合使用。
5. fdisk 命令
fdisk:对于一块硬盘来讲,最多只能管理 15 分区
格式:fdisk -l [-u] [device...]
参数选项:
- -b <size>
sector size (512, 1024, 2048 or 4096) - -c[=<mode>]
compatible mode: ‘dos’ or ‘nondos’ (default) - -h
print this help text - -u[=<unit>]
display units: ‘cylinders’ or ‘sectors’ (default) - -v
print program version - -C <number>
specify the number of cylinders - -H <number>
specify the number of heads - -S <number>
specify the number of sectors per track - -l
列出指定设备的分区表信息并退出,如果没有给出设备,那么使用那些在 /proc/partitions(如果存在)
实战演示:
[root@localhost ~]# fdisk -l
# 第一块硬盘的总量
Disk /dev/sda: 21.5 GB, 21474836480 bytes, 41943040 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
Disk label type: dos
Disk identifier: 0x00093397
# 单位为扇区,即为512KB
Device Boot Start End Blocks Id System
/dev/sda1 * 2048 1026047 512000 83 Linux
/dev/sda2 1026048 41943039 20458496 8e Linux LVM
# 第二块硬盘的分区表为空,暂时没有分区
Disk /dev/sdb: 5368 MB, 5368709120 bytes, 10485760 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
[root@localhost ~]# fdisk /dev/sdb
Welcome to fdisk (util-linux 2.23.2).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.
Device does not contain a recognized partition table
Building a new DOS disklabel with disk identifier 0xd2d77080.
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
g create a new empty GPT partition table
G create an IRIX (SGI) partition table
# 列出所有分区
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
# 修改分区id
t change a partition is 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
Partition type:
p primary (0 primary, 0 extended, 4 free)
e extended
Select (default p): p
Partition number (1-4, default 1): 1
First sector (2048-10485759, default 2048):
Using default value 2048
Last sector, +sectors or +size{K,M,G} (2048-10485759, default 10485759): +1G
Partition 1 of type Linux and of size 1 GiB is set
Command (m for help): l
0 Empty 24 NEC DOS 81 Minix / old Lin bf Solaris
1 FAT12 27 Hidden NTFS Win 82 Linux swap / So c1 DRDOS/sec (FAT-
2 XENIX root 39 Plan 9 83 Linux c4 DRDOS/sec (FAT-
3 XENIX usr 3c PartitionMagic 84 OS/2 hidden C: c6 DRDOS/sec (FAT-
4 FAT16 <32M 40 Venix 80286 85 Linux extended c7 Syrinx
5 Extended 41 PPC PReP Boot 86 NTFS volume set da Non-FS data
6 FAT16 42 SFS 87 NTFS volume set db CP/M / CTOS / .
7 HPFS/NTFS/exFAT 4d QNX4.x 88 Linux plaintext de Dell Utility
8 AIX 4e QNX4.x 2nd part 8e Linux LVM df BootIt
9 AIX bootable 4f QNX4.x 3rd part 93 Amoeba e1 DOS access
a OS/2 Boot Manag 50 OnTrack DM 94 Amoeba BBT e3 DOS R/O
b W95 FAT32 51 OnTrack DM6 Aux 9f BSD/OS e4 SpeedStor
c W95 FAT32 (LBA) 52 CP/M a0 IBM Thinkpad hi eb BeOS fs
e W95 FAT16 (LBA) 53 OnTrack DM6 Aux a5 FreeBSD ee GPT
f W95 Extd (LBA) 54 OnTrackDM6 a6 OpenBSD ef EFI (FAT-12/16/
10 OPUS 55 EZ-Drive a7 NeXTSTEP f0 Linux/PA-RISC b
11 Hidden FAT12 56 Golden Bow a8 Darwin UFS f1 SpeedStor
12 Compaq diagnost 5c Priam Edisk a9 NetBSD f4 SpeedStor
14 Hidden FAT16 <3 61 SpeedStor ab Darwin boot f2 DOS secondary
16 Hidden FAT16 63 GNU HURD or Sys af HFS / HFS+ fb VMware VMFS
17 Hidden HPFS/NTF 64 Novell Netware b7 BSDI fs fc VMware VMKCORE
18 AST SmartSleep 65 Novell Netware b8 BSDI swap fd Linux raid auto
1b Hidden W95 FAT3 70 DiskSecure Mult bb Boot Wizard hid fe LANstep
1c Hidden W95 FAT3 75 PC/IX be Solaris boot ff BBT
1e Hidden W95 FAT1 80 Old Minix
Command (m for help): q
6. 磁盘常用操作
查看内核是否已经识别新的分区
cat /proc/partations
通知内核重新读取硬盘分区表
- partx命令格式:partx -a在Cetntos6中使用的命令,能够重新的读取设定的分区。partx -a -n M:Nkpartx -a /dev/DEVICE
# 如果指定设备则重读特定设备,不指明则一次读取,如果你有两个设备则需要执行两次
partx -a /dev/sda
# 识别添加分区
partx -a -n 4:6 /dev/sda
# 强制添加内区到内核中
kpartx -a /dev/sda
- partprobe命令格式:partprobe [/dev/DEVICE]在Cetntos5/7中使用的命令,能够重新的读取设定的分区。
# 识别分区
partprobe /dev/sda
查看磁盘分区的类型和uuid
blkid /dev/sda5
/dev/sda5 UUID="XXXXXXXX" TYPE="ext4"
文章作者: Escape
文章链接: https://www.escapelife.site/posts/8184665e.html
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Escape !
相关推荐
- 使用nginx配置域名及禁止直接通过IP访问网站
-
前段时间刚搭建好这个网站,一直没有关注一个问题,那就是IP地址也可以访问我的网站,今天就专门研究了一下nginx配置问题,争取把这个问题研究透彻。1.nginx配置域名及禁止直接通过IP访问先来看n...
- 如何在 Linux 中使用 PID 号查找进程名称?
-
在Linux的复杂世界中,进程是系统运行的核心,每个进程都由一个唯一的「进程ID」(PID)标识。无论是系统管理员在排查失控进程,还是开发者在调试应用程序,知道如何将PID映射到对应的进程名称都是一项...
- Linux服务器硬件信息查询与日常运维命令总结
-
1.服务器硬件信息查询1.1CPU信息查询命令功能描述示例lscpu显示CPU架构、核心数、线程数等lscpucat/proc/cpuinfo详细CPU信息(型号、缓存、频率)cat/proc/c...
- Ubuntu 操作系统常用命令详解(ubuntu常用的50个命令)
-
UbuntuLinux是一款流行的开源操作系统,广泛应用于服务器、开发、学习等场景。命令行是Ubuntu的灵魂,也是高效、稳定管理系统的利器。本文按照各大常用领域,详细总结Ubuntu必学...
- 从 0 到 1:打造基于 Linux 的私有 API 网关平台
-
在当今微服务架构盛行的时代,API网关作为服务入口和安全屏障,其重要性日益凸显。你是否想过,不依赖商业方案,完全基于开源组件,在Linux上构建一个属于自己的私有API网关平台?今天就带你...
- Nginx搭建简单直播服务器(nginx 直播服务器搭建)
-
前言使用Nginx+Nginx-rtmp-module在Ubuntu中搭建简单的rtmp推流直播服务器。服务器环境Ubuntu16.04相关概念RTMP:RTMP协议是RealTi...
- Linux连不上网?远程卡?这篇网络管理指南你不能错过!
-
大家好!今天咱们聊个所有Linux用户都躲不开的“老大难”——网络管理。我猜你肯定遇到过这些崩溃时刻:新装的Linux系统连不上Wi-Fi,急得直拍桌子;远程服务器SSH连不上,提示“Connecti...
- 7天从0到上线!手把手教你用Python Flask打造爆款Web服务
-
一、为什么全网开发者都在疯学Flask?在当今Web开发的战场,Flask就像一把“瑞士军刀”——轻量级架构让新手3天速成,灵活扩展能力又能支撑百万级用户项目!对比Django的“重型装甲”,Flas...
- nginx配置文件详解(nginx反向代理配置详解)
-
Nginx是一个强大的免费开源的HTTP服务器和反向代理服务器。在Web开发项目中,nginx常用作为静态文件服务器处理静态文件,并负责将动态请求转发至应用服务器(如Django,Flask,et...
- 30 分钟搞定 Docker 安装与 Nginx 部署,轻松搭建高效 Web 服务
-
在云计算时代,利用容器技术快速部署应用已成为开发者必备技能。本文将手把手教你在阿里云轻量应用服务器上,通过Docker高效部署Nginx并发布静态网站,全程可视化操作,新手也能轻松上手!一、准...
- Nginx 配置实战:从摸鱼到部署,手把手教你搞定生产级配置
-
各位摸鱼搭子们!今天咱不聊代码里的NullPointerException,改聊点「摸鱼必备生存技能」——Nginx配置!先灵魂拷问一下:写了一堆接口却不会部署?服务器被恶意请求打崩过?静态资源加载...
- 如何使用 Daphne + Nginx + supervisor部署 Django
-
前言:从Django3.0开始支持ASGI应用程序运行,使Django完全具有异步功能。Django目前已经更新到5.0,对异步支持也越来越好。但是,异步功能将仅对在ASGI下运行的应用程序可用...
- Docker命令最全详解(39个最常用命令)
-
Docker是云原生的核心,也是大厂的必备技能,下面我就全面来详解Docker核心命令@mikechen本文作者:陈睿|mikechen文章来源:mikechen.cc一、Docker基本命令doc...
- ubuntu中如何查看是否已经安装了nginx
-
在Ubuntu系统中,可以通过以下几种方法检查是否已安装Nginx:方法1:使用dpkg命令(适用于Debian/Ubuntu)bashdpkg-l|grepnginx输出...
- OVN 概念与实践(德育概念的泛化在理论和实践中有什么弊端?)
-
今天我们来讲解OVN的概念和基础实践,要理解本篇博客的内容,需要前置学习:Linux网络设备-Bridge&VethPairLinux网络设备-Bridge详解OVS+Fa...
你 发表评论:
欢迎- 一周热门
-
-
UOS服务器操作系统防火墙设置(uos20关闭防火墙)
-
极空间如何无损移机,新Z4 Pro又有哪些升级?极空间Z4 Pro深度体验
-
手机如何设置与显示准确时间的详细指南
-
NAS:DS video/DS file/DS photo等群晖移动端APP远程访问的教程
-
如何在安装前及安装后修改黑群晖的Mac地址和Sn系列号
-
如何修复用户配置文件服务在 WINDOWS 上登录失败的问题
-
一加手机与电脑互传文件的便捷方法FileDash
-
日本海上自卫队的军衔制度(日本海上自卫队的军衔制度是什么)
-
10个免费文件中转服务站,分享文件简单方便,你知道几个?
-
爱折腾的特斯拉车主必看!手把手教你TESLAMATE的备份和恢复
-
- 最近发表
-
- 使用nginx配置域名及禁止直接通过IP访问网站
- 如何在 Linux 中使用 PID 号查找进程名称?
- Linux服务器硬件信息查询与日常运维命令总结
- Ubuntu 操作系统常用命令详解(ubuntu常用的50个命令)
- 从 0 到 1:打造基于 Linux 的私有 API 网关平台
- Nginx搭建简单直播服务器(nginx 直播服务器搭建)
- Linux连不上网?远程卡?这篇网络管理指南你不能错过!
- 7天从0到上线!手把手教你用Python Flask打造爆款Web服务
- nginx配置文件详解(nginx反向代理配置详解)
- 30 分钟搞定 Docker 安装与 Nginx 部署,轻松搭建高效 Web 服务
- 标签列表
-
- linux 查询端口号 (58)
- docker映射容器目录到宿主机 (66)
- 杀端口 (60)
- yum更换阿里源 (62)
- internet explorer 增强的安全配置已启用 (65)
- linux自动挂载 (56)
- 禁用selinux (55)
- sysv-rc-conf (69)
- ubuntu防火墙状态查看 (64)
- windows server 2022激活密钥 (56)
- 无法与服务器建立安全连接是什么意思 (74)
- 443/80端口被占用怎么解决 (56)
- ping无法访问目标主机怎么解决 (58)
- fdatasync (59)
- 405 not allowed (56)
- 免备案虚拟主机zxhost (55)
- linux根据pid查看进程 (60)
- dhcp工具 (62)
- mysql 1045 (57)
- 宝塔远程工具 (56)
- ssh服务器拒绝了密码 请再试一次 (56)
- ubuntu卸载docker (56)
- linux查看nginx状态 (63)
- tomcat 乱码 (76)
- 2008r2激活序列号 (65)