Linux 磁盘与文件系统操作

news2025/1/8 16:09:55

文章目录

    • 挂载磁盘分区
    • 卸载磁盘分区
    • fstrim
      • 检测 SSD 是否支持 TRIM
    • 检查磁盘状态
    • 判断磁盘是SSD还是HDD

挂载磁盘分区

文件系统一般都存在于磁盘上,挂载磁盘分区也可以说是挂载文件系统,卸载磁盘分区也可以说是卸载文件系统。
mount命令将格式化好的磁盘分区挂载到一个目录上

mount  /dev/sda3(要挂载的分区)   /mnt(挂载点)

常用参数:

不带参数的mount命令会显示所有已挂载的文件系统。

-t 指定文件系统的类型

-o 指定挂载选项

ro,rw 以只读或读写形式挂载,默认是rw

sync 代表不使用缓存,而是对所有操作直接写入磁盘(防止断电等异常情况引起数据丢失)

async 代表使用缓存,默认是async

noatime 代表每次访问文件时不更新文件的访问时间(accesstime)

atime 代表每次访问文件时更新文件的访问时间

remount 重新挂载文件系统

自动挂载:配置文件/etc/fstab用来定义需要自动挂载的文件系统,fstab中每一行代表一个挂载配置,格式如下:

/dev/sdb3 /mnt ext4 defaults 0 0 (之间用Tab隔开进行对齐)

需要挂载的设备 挂载点 文件系统 挂载选项 dump,fsck相关选项

要挂载的设备也可以使用LABEL进行识别,使用LABEL=xxx取代/dev/sdb3

Linux下用e2label命令来设定分区的label,其用法很简单:(查看或修改我们的卷标)

e2label 分区 [新label]

如果后面指定新label则为分区设定新label;如果后面不指定label,则显示分区的当前label。

mount –a命令会挂载所有fstab中定义的自动挂载项。

卸载磁盘分区

umount命令解挂文件系统。

umount [-ahnrvV][-t <文件系统类型>][文件系统]

umount可卸除目前挂在Linux目录中的文件系统。

线上在用的nfs访问时出了问题,导致/data1目录ls都无法进行输出,需要进行卸载掉 。而直接卸载时由于目录正被其他进程占用 ,无法直接umount,这里就结合fuser进行umount卸载。

1、直接卸载

[root@localhost /]# umount /data1/img
umount: /data1/img: device is busy
umount: /data1/img: device is busy

2、提示被占用,使用强制卸载

[root@localhost /]# umount -f /data1/img
umount2: Device or resource busy
umount: /data1/img: device is busy
umount2: Device or resource busy
umount: /data1/img: device is busy

注:使用-f 参数进行强制卸载时一般建议等一会儿再进行下面的操作,一些情况下处理需要1-2分钟的时间。

3、使用umount -f,问题依旧。使用fuser命令,先确认有那些进程在占用该目录

[root@localhost /]# fuser -cu /data1/img
/data1/img: 1757c(mysql)

也可以使用命令lsof查看正在被使用的文件。

上面查看发现是pid为1757的mysql用户起的进程在占用该目录。

4、确认mysql所起的进程可以kill 后,可以直接使用fuser 的k参数进行kill (也可以手动停掉1757进程再卸载)

[root@localhost /]# fuser -ck /data1/img
/data1/img: 1757c

注:这里k 就是kill的意思,注意没进行确认前要谨慎使用该参数。

fstrim

fstrim命令来自于英文词组“filesystem trim”的缩写,其功能是回收文件系统中未使用的块资源。

fstrim命令对固态硬盘和精简配置的存储设备意义较大,有一定提高驱动器读写效率,延长使用寿命的作用,当然设备一定要已支持TRIM才行

在使用SSD时,不能像传统的磁盘那样进行数据碎片整理,否则会使固态硬盘的寿命缩短。同时,由于SSD只能写入整块数据,如果写入比块小,则需要写入整个块,这就会导致浪费大量的存储空间。

使用Linux fstrim命令可以自动清除无用的数据块,从而提高固态硬盘的使用效率。

在使用 systemd 的 Linux 发行版中,一般都自带了 fstrim.timer 和 fstrim.service,启用后会定期一周执行一次 fstrim。

语法格式:fstrim [参数]

常用参数:

-a 回收所有已挂载文件系统上的未使用空间
-o 设置文件系统上搜索空闲块的起点
-l 设置在多大范围内搜索空闲块
-v 输出回收过程中的详细信息

由于fstrim命令的执行需要进行数据块清理,因此执行时间可能会比较长。在使用fstrim命令时,可以使用计划任务功能来实现自动运行fstrim命令。将命令添加到计划任务中,系统就可以定期自动执行fstrim命令。

  1. 注意事项

在使用fstrim命令时,需要注意以下几点:

(1)确认SSD支持fstrim命令

fstrim命令只能在支持TRIM命令的SSD上使用。如果SSD不支持TRIM技术,执行fstrim命令将会有损SSD的寿命和数据完整性。

(2)定期运行fstrim命令

建议定期运行fstrim命令来释放磁盘空间。一般情况下,建议每周运行一次。

(3)确认挂载点

在执行fstrim命令之前,需要确认SSD的挂载点是否正确。如果挂载点错误,可能会导致错误的数据块被清理,从而损坏SSD的数据。

(4)备份重要数据

在执行fstrim命令之前,需要备份重要数据。虽然执行fstrim命令不会删除文件,但也有可能导致数据丢失。

检测 SSD 是否支持 TRIM

可以通过 /sys/block 下的信息来判断 SSD 支持 TRIM, discard_granularity 非 0 表示支持。

cat /sys/block/nvme0n1/queue/discard_granularity 
512

也可以直接使用 lsblk 来检测,DISC-GRAN (discard granularity) 和 DISC-MAX (discard max bytes) 列非 0 表示该 SSD 支持 TRIM 功能。

lsblk --discard 
NAME        DISC-ALN DISC-GRAN DISC-MAX DISC-ZERO
sda                0        4K       2G         0
└─sda1             0        4K       2G         0
nvme0n1            0      512B       2T         0
├─nvme0n1p1        0      512B       2T         0
├─nvme0n1p2        0      512B       2T         0
└─nvme0n1p3        0      512B       2T         0

lsblk --discard    
NAME   DISC-ALN DISC-GRAN DISC-MAX DISC-ZERO
sda           0        0B       0B         0
├─sda1        0        0B       0B         0
├─sda2        0        0B       0B         0
└─sda3        0        0B       0B         0
sdb           0        0B       0B         0
└─sdb1        0        0B       0B         0
sr0           0        0B       0B         0
loop0         0        4K       4G         1

网上也有文章介绍通过 hdparm 来检测,

sudo hdparm -I /dev/sda | grep TRIM
	   *	Data Set Management TRIM supported (limit 10 blocks)
	   *	Deterministic read data after TRIM

sudo hdparm -I /dev/sda | grep TRIM
SG_IO: bad/missing sense data, sb[]:  f0 00 05 00 00 00 00 0a 00 00 00 00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

对于 ext4 文件系统,可以在/etc/fstab里添加 discard 参数来启用 TRIM,添加前请确认你的 SSD 支持 TRIM。

/dev/sdb1 /data1 ext4 defaults,noatime,discard 0 0

util-linux 中自带了 fstrim 工具(Discard unused blocks on a mounted filesystem.),平常用 -a 选项(-a, --all trim all mounted filesystems that are supported)比较多,可以自动检测硬盘是否支持 trim 功能,并在已挂载文件系统上执行 trim

检查磁盘状态

主要命令:fdisk, lsscsi, mount, df, lsblk
查看磁盘分区等信息:

$ fdisk -l

$ lsscsi	# lsscsi包

$ mount

$ df  -ah

$ lsblk -f

以上命令有多种选项,选择适当的选项可以定制输出信息。

判断磁盘是SSD还是HDD

判断cat /sys/block/*/queue/rotational的返回值(其中*为你的硬盘设备名称,例如sda等等),如果返回1则表示磁盘可旋转,那么就是HDD了;反之,如果返回0,则表示磁盘不可以旋转,那么就有可能是SSD了。

$ cat /sys/block/sda/queue/rotational 
1

$ cat /sys/block/nvme0n1/queue/rotational 
0

这种方法有个问题,那就是/sys/block/下面不只有硬盘,还可能有别的块设备,它们都在干扰你的判断。

  1. 使用lsblk命令进行判断,参数-d表示仅显示设备本身(不显示其上分区),参数-o表示仅显示特定的列。

$ lsblk -d -o name,rota
NAME    ROTA
sda        1
nvme0n1    0

ROTA是1的表示可以旋转,反之则不能旋转。

  1. 可以使用第三方工具判断,比如smartctl,这些工具的结果展示比较直观,但是需要单独安装。
$ sudo smartctl -a /dev/sda | grep -i rotation
Rotation Rate:    5400 rpm

$ sudo smartctl -a /dev/nvme0n1 | grep -i rotation

机械磁盘HDD

smartctl -a /dev/sda	# smartmontools包

固态磁盘SSD

smartctl -a /dev/nvme0

针对nvme磁盘,可以使用以下nvme-cli包中的命令:

  • nvme list:显示系统中所有nvme设备的信息,包括设备名称、大小、固件版本等。
  • nvme id-ctrl:显示nvme设备的详细信息,包括该设备的厂商、型号、序列号、容量等。
  • nvme smart-log:显示nvme设备的SMART信息,包括该设备的使用状况、错误计数、温度等。
# nvme list
Node             SN                   Model                                    Namespace Usage                      Format           FW Rev  
---------------- -------------------- ---------------------------------------- --------- -------------------------- ---------------- --------
/dev/nvme0n1     L9MLCHC21287268      ACR512GMLCH-E3C-2                        1         512.11  GB / 512.11  GB    512   B +  0 B   EDFM60.0

# nvme id-ctrl  /dev/nvme0n1
NVME Identify Controller:
vid       : 0x1987
ssvid     : 0x1987
sn        : L9MLCHC21287268     
mn        : ACR512GMLCH-E3C-2                       
fr        : EDFM60.0
rab       : 1
ieee      : 6479a7
cmic      : 0
mdts      : 6
cntlid    : 1
ver       : 10300
rtd3r     : 124f80
rtd3e     : 2191c0
oaes      : 0
ctratt    : 0
rrls      : 0
oacs      : 0x17
acl       : 0
aerl      : 3
frmw      : 0x12
lpa       : 0xe
elpe      : 15
npss      : 4
avscc     : 0x1
apsta     : 0x1
wctemp    : 343
cctemp    : 363
mtfa      : 100
hmpre     : 139672
hmmin     : 546
tnvmcap   : 512110190592
unvmcap   : 0
rpmbs     : 0
edstt     : 30
dsto      : 1
fwug      : 4
kas       : 1
hctma     : 0x1
mntmt     : 273
mxtmt     : 343
sanicap   : 0x6
hmminds   : 0
hmmaxd    : 0
nsetidmax : 0
anatt     : 0
anacap    : 0
anagrpmax : 0
nanagrpid : 0
sqes      : 0x66
cqes      : 0x44
maxcmd    : 0
nn        : 1
oncs      : 0x5e
fuses     : 0
fna       : 0x1
vwc       : 0x1
awun      : 255
awupf     : 0
nvscc     : 1
nwpc      : 0
acwu      : 0
sgls      : 0
mnan      : 0
subnqn    : 
ioccsz    : 0
iorcsz    : 0
icdoff    : 0
ctrattr   : 0
msdbd     : 0
ps    0 : mp:3.50W operational enlat:0 exlat:0 rrt:0 rrl:0
          rwt:0 rwl:0 idle_power:- active_power:-
ps    1 : mp:1.90W operational enlat:0 exlat:0 rrt:1 rrl:1
          rwt:1 rwl:1 idle_power:- active_power:-
ps    2 : mp:1.50W operational enlat:0 exlat:0 rrt:2 rrl:2
          rwt:2 rwl:2 idle_power:- active_power:-
ps    3 : mp:0.0700W non-operational enlat:5000 exlat:1900 rrt:3 rrl:3
          rwt:3 rwl:3 idle_power:- active_power:-
ps    4 : mp:0.0020W non-operational enlat:13000 exlat:100000 rrt:4 rrl:4
          rwt:4 rwl:4 idle_power:- active_power:-

# nvme smart-log /dev/nvme0n1
Smart Log for NVME device:nvme0n1 namespace-id:ffffffff
critical_warning                    : 0
temperature                         : 40 C
available_spare                     : 100%
available_spare_threshold           : 5%
percentage_used                     : 35%
data_units_read                     : 27,587,533
data_units_written                  : 125,249,587
host_read_commands                  : 486,510,750
host_write_commands                 : 9,583,798,391
controller_busy_time                : 8,831,533,374
power_cycles                        : 199
power_on_hours                      : 24,531
unsafe_shutdowns                    : 119
media_errors                        : 0
num_err_log_entries                 : 10,905
Warning Temperature Time            : 5469
Critical Composite Temperature Time : 0
Thermal Management T1 Trans Count   : 30
Thermal Management T2 Trans Count   : 13
Thermal Management T1 Total Time    : 223518
Thermal Management T2 Total Time    : 149572

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2272671.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

极客说|微软 Phi 系列小模型和多模态小模型

作者&#xff1a;胡平 - 微软云人工智能高级专家 「极客说」 是一档专注 AI 时代开发者分享的专栏&#xff0c;我们邀请来自微软以及技术社区专家&#xff0c;带来最前沿的技术干货与实践经验。在这里&#xff0c;您将看到深度教程、最佳实践和创新解决方案。关注「极客说」&am…

解决 IntelliJ IDEA 中 Tomcat 日志乱码问题的详细指南

目录 前言1. 分析问题原因2. 解决方案 2.1 修改 IntelliJ IDEA 的 JVM 选项2.2 配置 Tomcat 实例的 VM 选项 2.2.1 设置 Tomcat 的 VM 选项2.2.2 添加环境变量 3. 进一步优化 3.1 修改 Tomcat 的 logging.properties3.2 修改操作系统默认编码 3.2.1 Windows 系统3.2.2 Linux …

某小程序sign签名参数逆向分析

文章目录 1. 写在前面2. 接口分析3. 分析还原 【&#x1f3e0;作者主页】&#xff1a;吴秋霖 【&#x1f4bc;作者介绍】&#xff1a;擅长爬虫与JS加密逆向分析&#xff01;Python领域优质创作者、CSDN博客专家、阿里云博客专家、华为云享专家。一路走来长期坚守并致力于Python…

医学图像分析工具02:3D Slicer || 医学影像可视化与分析工具 支持第三方插件

3D Slicer 是一款功能全面的开源医学影像分析软件&#xff0c;广泛应用于影像处理、三维建模、影像配准和手术规划等领域。它支持多种医学影像格式&#xff08;如 DICOM、NIfTI&#xff09;和丰富的插件扩展&#xff0c;是神经科学、放射学和生物医学研究中不可或缺的工具。 在…

Linux系统安装es详细教程

一、下载es及插件 从下面的网址进行对应es版本的下载https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.15.2-linux-x86_64.tar.gz &#xff0c;想要不同版本的es只需更换对应的版本号即可。 插件下载地址&#xff08;ik分词器、pinyin等&#xff09;es…

电子电气架构 --- 汽车总线基础介绍

我是穿拖鞋的汉子&#xff0c;魔都中坚持长期主义的汽车电子工程师。 老规矩&#xff0c;分享一段喜欢的文字&#xff0c;避免自己成为高知识低文化的工程师&#xff1a; 简单&#xff0c;单纯&#xff0c;喜欢独处&#xff0c;独来独往&#xff0c;不易合同频过着接地气的生活…

安装PyQt5-tools卡在Preparing metadata (pyproject.toml)解决办法

为了在VS code中使用PyQt&#xff0c;在安装PyQt5-tools时总卡在如下这一步 pyqt5 Preparing metadata (pyproject.toml)经过各种尝试&#xff0c;最终问题解决&#xff0c;在此记录方法。 首先进入PyQt5-tools官网查看其适配的Python版本&#xff0c;网址如下&#xff1a; h…

38 Opencv HOG特征检测

文章目录 HOGDescriptor 构造函数setSVMDetector 设置支持向量机&#xff08;SVM&#xff09;检测器&#xff0c;用于目标检测。compute 用于计算图像区域的HOG描述符。detectMultiScale 多尺度检测目标。示例 HOGDescriptor 构造函数 HOGDescriptor(); HOGDescriptor(const S…

分布式搜索引擎之elasticsearch基本使用3

分布式搜索引擎之elasticsearch基本使用3 1.部署单点es 1.1.创建网络 因为我们还需要部署kibana容器&#xff0c;因此需要让es和kibana容器互联。这里先创建一个网络&#xff1a; docker network create es-net1.2.加载镜像 这里我们采用elasticsearch的7.12.1版本的镜像&…

人工智能知识分享第九天-机器学习_集成学习

集成学习 概念 集成学习是机器学习中的一种思想&#xff0c;它通过多个模型的组合形成一个精度更高的模型&#xff0c;参与组合的模型称为弱学习器&#xff08;基学习器&#xff09;。训练时&#xff0c;使用训练集依次训练出这些弱学习器&#xff0c;对未知的样本进行预测时…

在线机考|2024华为实习秋招春招编程题(最新)——第3题_个性化歌单推荐系统_300分(十一)

题目内容 假设你是音乐服务的开发者,为了提高用户体验需要解决推荐歌单的同质化问题,保证推荐给用户的所有歌单不包含相同歌曲的。给定一个包含N个歌单和M条歌单重复记录,每个歌单用一个从1到N的整数编号,歌单重复记录包含两个歌单的ID,表示两个歌单有相同的歌曲。 你的任…

学英语学压测:02jmeter组件-测试计划和线程组ramp-up参数的作用

&#x1f4e2;&#x1f4e2;&#x1f4e2;&#xff1a;先看关键单词&#xff0c;再看英文&#xff0c;最后看中文总结&#xff0c;再回头看一遍英文原文&#xff0c;效果更佳&#xff01;&#xff01; 关键词 Functional Testing功能测试[ˈfʌŋkʃənəl ˈtɛstɪŋ]Sample样…

最新最详细的配置Node.js环境教程

配置Node.js环境 一、前言 &#xff08;一&#xff09;为什么要配置Node.js&#xff1f;&#xff08;二&#xff09;NPM生态是什么&#xff08;三&#xff09;Node和NPM的区别 二、如何配置Node.js环境 第一步、安装环境第二步、安装步骤第三步、验证安装第四步、修改全局模块…

PHP框架+gatewayworker实现在线1对1聊天--接收消息(7)

文章目录 接收消息的原理接收消息JavaScript代码 接收消息的原理 接收消息&#xff0c;就是接受服务器转发的客户端消息。并不需要单独创建函数&#xff0c;因为 ws.onmessage会自动接收消息。我们需要在这个函数里进行处理。因为初始化的时候&#xff0c;已经处理的init类型的…

当算法遇到线性代数(四):奇异值分解(SVD)

SVD分解的理论与应用 线性代数系列相关文章&#xff08;置顶&#xff09; 1.当算法遇到线性代数&#xff08;一&#xff09;&#xff1a;二次型和矩阵正定的意义 2.当算法遇到线性代数&#xff08;二&#xff09;&#xff1a;矩阵特征值的意义 3.当算法遇到线性代数&#xff0…

科研绘图系列:R语言科研绘图之标记热图(heatmap)

禁止商业或二改转载,仅供自学使用,侵权必究,如需截取部分内容请后台联系作者! 文章目录 介绍加载R包数据下载导入数据数据预处理画图系统信息参考介绍 科研绘图系列:R语言科研绘图之标记热图(heatmap) 加载R包 library(tidyverse) library(ggplot2) library(reshape)…

Mysql--基础篇--SQL(DDL,DML,窗口函数,CET,视图,存储过程,触发器等)

SQL&#xff08;Structured Query Language&#xff0c;结构化查询语言&#xff09;是用于管理和操作关系型数据库的标准语言。它允许用户定义、查询、更新和管理数据库中的数据。SQL是一种声明性语言&#xff0c;用户只需要指定想要执行的操作&#xff0c;而不需要详细说明如何…

Excel重新踩坑5:二级下拉列表制作;★数据透视表;

0、在excel中函数公式不仅可以写在单元格里面&#xff0c;还可以写在公式里面。 1、二级下拉列表制作&#xff1a; 2、数据透视表&#xff1a; 概念&#xff1a;通过拖拉就能实现复杂函数才能实现的数据统计问题。 概览&#xff1a;在插入选项中有个数据透视表&#xff0c;数…

Linux-----进程处理(waitpid,进程树,孤儿进程)

目录 waitpid等待 进程树 孤儿进程 waitpid等待 Linux中父进程除了可以启动子进程&#xff0c;还要负责回收子进程的状态。如果子进程结束后父进程没有正常回收&#xff0c;那么子进程就会变成一个僵尸进程——即程序执行完成&#xff0c;但是进程没有完全结束&#xff0c;其…

解决报错net.sf.jsqlparser.statement.select.SelectBody

在我们项目集成mybatis-plus时,总会遇到奇奇怪怪的报错,比如说下面的这个报错 而这个报错,是告诉我们的分页依赖冲突,要加个jsqlparser依赖来解决这个冲突,也相当于平衡,但是可能因为我们版本的不匹配,还是会报错,例如下面这样 但是我们是不知道到底是什么依赖冲突的,这个时候就…