百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 热门文章 > 正文

Linux云计算-06_Linux磁盘管理

bigegpt 2024-08-05 11:47 11 浏览

本章介绍硬盘简介、硬盘数据存储方式、如何在企业生产服务器添加硬盘、对硬盘进行分区、初始化、挂载等。

1 计算机硬盘简介

硬盘是计算机主要存储媒介之一,由一个或者多个铝制或者玻璃制的碟片组成,碟片外覆盖有铁磁性材料,硬盘内部由磁道、柱面、扇区、磁头等部件组成,如图所示:

Linux系统中硬件设备相关配置文件存放在/dev下,常见硬盘命名:/dev/hda、/dev/sda、/dev/sdb、/dev/sdc、/dev/vda。不同硬盘接口,在系统中识别的设备名称不一样。

IDE硬盘接口在Linux中设备名为/dev/hda,SAS、SCSI、SATA硬盘接口在Linux中设备名为sda,高效云盘硬盘接口会识别为/dev/vda等。

文件储存在硬盘上,硬盘的最小存储单位叫做Sector(扇区),每个Sector储存512字节。操作系统在读取硬盘的时候,不会逐个Sector的去读取,这样效率非常低,为了提升读取效率,操作系统会一次性连续读取多个Sector,即一次性读取多个Sector称为一个Block(块)。

由多个Sector组成的Block是文件存取的最小单位。Block的大小常见的有1KB、2KB、4KB,Block在Linux中常设置为4KB,即连续八个Sector组成一个Block。

可以通过如下方法查看Linux分区的Block大小:

[root@superman-vm01 ~]# stat /boot | grep "IO Block" 
  Size: 4096            Blocks: 8          IO Block: 4096   directory
[root@superman-vm01 ~]# 

例如创建一个普通文件,文件大小为10Bytes,而默认设置Block为4K,如果有1万个小文件,由于每个Block只能存放一个文件,如果文件的大小比Block大,会申请更多的Block,相反如果文件的大小比默认Block小,仍会占用一个Block,这样剩余的空间会被浪费掉。

  • 1万个文件理论只占用空间大小:10000x10=100000Bytes=97.65625MBytes;
  • 1万个文件真实占用空间大小:10000x4096Bytes=40960000Bytes=40000MBytes=40GB;
  • 根据企业实际需求,此时可以将Block设置为1K,从而节省更多的空间。

2 硬盘Block及Inode详解

通常而言,操作系统对于文件数据的存放包括两个部分:文件内容、权限及文件属性。操作系统文件存放是基于文件系统,文件系统会将文件的实际内容存储到Block中,而将权限与属性等信息存放至Inode中。

在硬盘分区中,还有一个超级区块 (SuperBlock) ,SuperBlock会记录整个文件系统的整体信息,包括Inode、Block总量、使用大小、剩余大小等信息,每个inode与block都有编号对应,方便Linux系统快速定位查找文件。

  • Superblock:记录文件系统的整体信息,包括inode与block的总量、使用大小、剩余大小, 以及文件系统的格式与相关信息等;
  • Inode:记录文件的属性,权限,同时会记录该文件的数据所在的block编号;
  • Block:存储文件的内容,如果文件超过默认Block大小,会自动占用多个Block。

因为每个inode与block都有编号,而每个文件都会占用一个inode ,inode内则有文件数据放置的block号码。如果能够找到文件的inode,就可以找到该文件所放置数据的block号码,从而读取该文件内容。

操作系统进行格式化分区时,操作系统自动将硬盘分成两个区域。一个是数据Block区,用于存放文件数据;另一个是Inode Table区,用于存放inode包含的元信息。

每个inode节点的大小,可以在格式化时指定,默认为128Bytes或256Bytes,/boot分区Inode默认为128Bytes,其它分区默认为256Bytes,查看Linux系统Inode方法如下:

[root@superman-vm01 ~]# stat /boot | grep "Inode"   
Device: 801h/2049d      Inode: 64          Links: 5
[root@superman-vm01 ~]# 

3 硬链接介绍

一般情况下,文件名和inode编号是一一对应的关系,每个inode号码对应一个文件名。但UNIX/Linux系统多个文件名也可以指向同一个inode号码。这意味着可以用不同的文件名访问同样的内容,对文件内容进行修改,会影响到所有文件名。但删除一个文件名,不影响另一个文件名的访问。这种情况就被称为硬链接(hard link)。

创建硬链接的命令为:ln superman1.txt superman2.txt,其中superman1.txt为源文件,superman2.txt为目标文件。如上命令源文件与目标文件的inode号码相同,都指向同一个inode。inode信息中有一项叫做"链接数",记录指向该inode的文件名总数,这时会增加1,变成2,如图7-3所示:

同样删除一个superman2.txt文件,就会使得superman1.txt inode节点中的"链接数"减1。如果该inode值减到0,表明没有文件名指向这个inode,系统就会回收这个inode号码,以及其所对应block区域,如图所示:

实用小技巧:硬链接不能跨分区链接,硬链接只能对文件生效,对目录无效,也即是目录不能创建硬链接。硬链接源文件与目标文件共用一个inode值,从某种意义上来,节省inode空间。不管是单独删除源文件还是删除目标文件,文件内容始终存在。同时链接后的文件不占用系统多余的空间。

4 软链接介绍

除了硬链接以外,还有一种链接-软链接。文件superman1.txt和文件superman2.txt的inode号码虽然不一样,但是文件superman2.txt的内容是文件superman1.txt的路径。读取文件superman2.txt时,系统会自动将访问者导向文件superman1.txt。

无论打开哪一个文件,最终读取的都是文件superman1.txt。这时,文件superman2.txt就称为文件superman1.txt的"软链接"(soft link)或者"符号链接(symbolic link)。

文件superman2.txt依赖于文件superman1.txt而存在,如果删除了文件superman1.txt,打开文件superman2.txt就会报错:"No such file or directory"。

软链接与硬链接最大的不同是文件superman2.txt指向文件superman1.txt的文件名,而不是文件superman1.txt的inode号码,因此文件superman1.txt的inode链接数不会发生变化,如图所示:

实用小技巧:软链接可以跨分区链接,软链接支持目录同时也支持文件的链接。软链接源文件与目标文件Inode不相同,从某种意义上来说,会消耗inode空间。不管是删除源文件还是重启系统,该软链接还存在,但是文件内容会丢失,一旦新建源同名文件名,软链接文件恢复正常。

5 Linux下磁盘实战操作命令

企业真实场景由于硬盘常年大量读写,经常会出现坏盘,需要更换硬盘。或者由于磁盘空间不足,需添加新硬盘,新添加的硬盘需要经过格式化、分区才能被Linux系统所使用,虚拟机CentOS 7 Linux模拟真实服务器添加一块新硬盘,不需要关机,直接插入用硬盘即可,一般硬盘均支持热插拔功能。企业中添加新硬盘的操作流程如下:

5.1 fdisk分区命令参数

常用参数包括m、n、p、e、d、w。

b                       编辑bsd disklabel;
c                       切换dos兼容性标志;
d                       删除一个分区;
g                       创建一个新的空GPT分区表;
G                       创建一个IRIX(SGI)分区表;
l                       列出已知的分区类型;
m                       打印帮助菜单;
n                       添加一个新分区;
o                       创建一个新空DOS分区表;
p                       打印分区表信息;
q                       退出而不保存更改;
s                       创建一个新的空的Sun磁盘标签;
t                       更改分区的系统ID;
u                       更改显示/输入单位;
v                       验证分区表;
w                       将分区表写入磁盘并退出;
x                       额外功能。

5.2 检测识别的硬盘设备

新添加硬盘被识别为/dev/sdb,如果有多块硬盘,会依次识别成/dev/sdc、/dev/sdd等设备名称,如图所示:

fdisk -l

5.3 创建磁盘分区

基于新硬盘/dev/sdb设备,创建磁盘分区/dev/sdb1,如图所示:

fdisk /dev/sdb

5.4 创建/dev/sdb1分区方法

fdisk /dev/sdb,然后按n-p-1-Enter键-Enter键-Enter键-w,最后执行fdisk -l|head -10,如图(a)、图(b)所示:

(a)fdisk /dev/sdb创建/dev/sdb1分区

(b) fdisk –l查看/dev/sdb1分区

5.5 格式化分区

mkfs.xfs /dev/sdb1格式化磁盘分区,如图所示:

5.6 挂载分区

/dev/sdb1分区格式化后,使用mount命令挂载到/data/目录,并加入/etc/fstab开机启动,如图所示:

# 创建/data/数据目录
mkdir /data

# 挂载/dev/sdb1分区至/data/目录
mount /dev/sdb1 /data

# 查看磁盘分区详情
df -h

# 开机自动挂载(永久挂载)
echo "/dev/sdb1        /data                       xfs     defaults        0 0" >>/etc/fstab

6 基于GPT格式磁盘分区

MBR分区标准决定了MBR只支持在2TB以下的硬盘,为了支持能使用大于2T硬盘空间,需使用GPT格式进行分区。创建大于2TB的分区,需使用parted工具。

在企业真实环境中,通常一台服务器有多块硬盘,整个硬盘容量可能为10T,需要基于GTP格式对10T硬盘进行分区,操作步骤如下:

# 新建/dev/sdb的磁盘标签类型为GPT
parted /dev/sdb mklabel gpt

# 将/dev/sdb整个空间分给同一个分区
parted /dev/sdb mkpart primary 0 100%

# 忽略警告
ignore

# 格式化分区
mkfs.xfs /dev/sdb1

# 创建挂载目录
mkdir /data

# 临时挂载
mount /dev/sdb1 /data

# 开机自动挂载(永久挂载)
echo "/dev/sdb1        /data                       xfs     defaults        0 0" >>/etc/fstab

6.1 检测识别的硬盘设备

fdisk -l

如图所示,假设/dev/sdb 为10T硬盘,使用GPT格式来格式化磁盘:

6.2 设置分区类型为GPT格式

6.2.1 非交互方式

执行命令:parted -s /dev/sdb mklabel gpt和parted /dev/sdb mkpart primary 0 100%如图所示:

6.2.2 交互方式

parted命令行也可以进行分区,如图(a)、(b)、(c)所示:

parted > select /dev/sdb > mklabel gpt > mkpart primary 0 -1 > print > quit

6.3 格式化磁盘

基于mkfs.xfs /dev/sdb格式化磁盘,如图所示:

6.4 挂载分区

创建挂载目录并挂载:

7 Mount命令工具

Mount命令工具主要用于将设备或者分区挂载至Linux系统目录下,Linux系统在分区时,也是基于mount机制将/dev/sda分区挂载至系统目录,将设备与目录挂载之后,Linux操作系统方可进行文件的存储。

7.1 Mount命令参数详解

如下为企业中Mount命令常用参数详解:

mount [-Vh]
mount -a [-fFnrsvw] [-t vfstype]
mount [-fnrsvw] [-o options [,...]] device | dir
mount [-fnrsvw] [-t vfstype] [-o options] device dir
-V:                             显示mount工具版本号;
-l:                             显示已加载的文件系统列表;
-h:                             显示帮助信息并退出;
-v:                             输出指令执行的详细信息;
-n:                             加载没有写入文件/etc/mtab中的文件系统;
-r:                             将文件系统加载为只读模式; 
-a:                             加载文件/etc/fstab中配置的所有文件系统;
-o:                              指定mount挂载扩展参数,常见扩展指令:rw、remount、loop等,其中-o相关指令如下:
-o atime:                       系统会在每次读取文档时更新文档时间;
-o noatime:                     系统会在每次读取文档时不更新文档时间;
-o defaults:                     使用预设的选项 rw,suid,dev,exec,auto,nouser等;
-o exec                          允许执行档被执行;
-o user、-o nouser:              使用者可以执行 mount/umount的动作;
-o remount:                      将已挂载的系统分区重新以其他再次模式挂载;
-o ro:                           只读模式挂载;
-o rw:                           可读可写模式挂载;
-o loop                           使用loop模式,把文件当成设备挂载至系统目录。
-t:                              指定mount挂载设备类型,常见类型nfs、ntfs-3g、vfat、iso9660等,其中-t相关指令如下:
iso9660                           光盘或光盘镜像;
msdos                             Fat16文件系统;
vfat                              Fat32文件系统;
ntfs                              NTFS文件系统;
ntfs-3g                           识别移动硬盘格式;
smbfs                             挂载Windows文件网络共享;
nfs                               Unix/Linux文件网络共享。

7.2 企业常用Mount案例

Mount常用案例如下:

7.2.1 挂载/dev/sdb1分区至/data/目录

mount /dev/sdb1 /data

7.2.2 挂载cdrom光盘至/mnt目录

mount /dev/cdrom /mnt

7.2.3 挂载/dev/sdb1移动硬盘至/data目录

mount -t ntfs-3g /dev/sdb1 /data

注意:如果提示未知的文件系统类型“ntfs”,请执行”yum install -y ntfs-3g“安装ntfs-3g软件包。

7.2.4 重新以读写模式挂载/系统

mount -o remount,rw /

7.2.5 将CentOS-7-x86_64-DVD-1810.iso镜像文件挂载至/mnt目录

mount -t iso9660 -o loop CentOS-7-x86_64-DVD-1810.iso /mnt

7.2.6 将U盘/dev/sdd1挂载至/mnt/目录

mount -t vfat /dev/sdb1 /mnt

7.2.7 将远程192.168.1.182:/data目录挂载至本地/data目录

mount -t nfs 192.168.1.182:/data/ /data

相关推荐

程序员请收好:10个非常有用的 Visual Studio Code 插件

一个插件列表,可以让你的程序员生活变得轻松许多。作者|Daan译者|Elle出品|CSDN(ID:CSDNnews)以下为译文:无论你是经验丰富的开发人员还是刚刚开始第一份工作的初级开发人...

PADS在WIN10系统中菜单显示不全的解决方法

决定由AD转PADS,打开发现菜单显示不正常,如下图所示:这个是由于系统的默认字体不合适导致,修改一下系统默认字体即可,修改方法如下:打开开始菜单-->所有程序-->Windows系统--...

一文讲解Web前端开发基础环境配置

先从基本的HTML语言开始学习。一个网页的所有内容都是基于HTML,为了学好HTML,不使用任何集成工具,而用一个文本编辑器,直接从最简单的HTML开始编写HTML。先在网上下载notepad++文...

TCP/IP协议栈在Linux内核中的运行时序分析

本文主要是讲解TCP/IP协议栈在Linux内核中的运行时序,文章较长,里面有配套的视频讲解,建议收藏观看。1Linux概述  1.1Linux操作系统架构简介Linux操作系统总体上由Linux...

从 Angular Route 中提前获取数据

#头条创作挑战赛#介绍提前获取意味着在数据呈现在屏幕之前获取到数据。本文中,你将学到,在路由更改前怎么获取到数据。通过本文,你将学会使用resolver,在AngularApp中应用re...

边做游戏边划水: 基于浅水方程的水面交互、河道交互模拟方法

以下文章来源于腾讯游戏学堂,作者Byreave篇一:基于浅水方程的水面交互本文主要介绍一种基于浅水方程的水体交互算法,在基本保持水体交互效果的前提下,实现了一种极简的水面模拟和物体交互方法。真实感的...

Nacos介绍及使用

一、Nacos介绍Nacos是SpringCloudAlibaba架构中最重要的组件。Nacos是一个更易于帮助构建云原生应用的动态服务发现、配置和服务管理平台,提供注册中心、配置中心和动态DNS...

Spring 中@Autowired,@Resource,@Inject 注解实现原理

使用案例前置条件:现在有一个Vehicle接口,它有两个实现类Bus和Car,现在还有一个类VehicleService需要注入一个Vehicle类型的Bean:publicinte...

一文带你搞懂Vue3 底层源码

作者:妹红大大转发链接:https://mp.weixin.qq.com/s/D_PRIMAD6i225Pn-a_lzPA前言vue3出来有一段时间了。今天正式开始记录一下梗vue3.0.0-be...

一线开发大牛带你深度解析探讨模板解释器,解释器的生成

解释器生成解释器的机器代码片段都是在TemplateInterpreterGenerator::generate_all()中生成的,下面将分小节详细展示该函数的具体细节,以及解释器某个组件的机器代码...

Nacos源码—9.Nacos升级gRPC分析五

大纲10.gRPC客户端初始化分析11.gRPC客户端的心跳机制(健康检查)12.gRPC服务端如何处理客户端的建立连接请求13.gRPC服务端如何映射各种请求与对应的Handler处理类14.gRP...

聊聊Spring AI的Tool Calling

序本文主要研究一下SpringAI的ToolCallingToolCallbackorg/springframework/ai/tool/ToolCallback.javapublicinter...

「云原生」Containerd ctr,crictl 和 nerdctl 命令介绍与实战操作

一、概述作为接替Docker运行时的Containerd在早在Kubernetes1.7时就能直接与Kubelet集成使用,只是大部分时候我们因熟悉Docker,在部署集群时采用了默认的dockers...

在MySQL登录时出现Access denied for user ~~ (using password: YES)

Windows~~~在MySQL登录时出现Accessdeniedforuser‘root‘@‘localhost‘(usingpassword:YES),并修改MySQL密码目录适用...

mysql 8.0多实例批量部署script

背景最近一个项目上,客户需要把阿里云的rdsformysql数据库同步至线下,用作数据的灾备,需要在线下的服务器上部署mysql8.0多实例,为了加快部署的速度,写了一个脚本。解决方案#!/bi...