当前位置: 首页 > news >正文

Linux存储管理之核心秘密(The Core Secret of Linux Storage Management)

Linux存储管理之核心秘密

如果你来自Windows环境,那么Linux处理和管理存储设备的方式对你而言可能显得格外不同。我们知道,Linux的文件系统并不采用Windows那样的物理驱动器表示方式(如C:、D:或E:),而是构建了一个以"/"为根的统一文件树结构。本文将深入探讨Linux如何表示和管理硬盘、闪存驱动器等存储设备。

在进入技术细节之前,我们首先需要理解如何将额外的驱动器和存储设备挂载到文件系统中,最终集成到根目录"/"下。在这个语境中,"挂载"意味着将驱动器或磁盘连接到文件系统,使操作系统能够访问它们。对安全分析人员而言,深入理解文件系统和存储设备管理机制至关重要,这不仅涉及自身系统,更常见于目标系统分析。安全研究人员经常需要使用外部媒体加载数据、部署工具,有时甚至需要引导完整的操作系统。在渗透测试过程中,你需要准确定位目标系统上的敏感数据,理解如何挂载新的存储设备,以及评估数据存储的安全性。本文将全面覆盖这些主题,并详细介绍存储设备的管理与监控技术。

设备目录 /dev

Linux系统中存在一个专门用于管理设备文件的特殊目录:/dev(device的缩写)。系统中的每个设备都在这个目录下有对应的文件表示。让我们首先深入了解这个关键目录。

kali > cd /dev
kali > ls -l
total 0
crw------- 1 root root 10,175 May 16 12:44 agpgart
crw------- 1 root root 10,235 May 16 12:44 autofs
drwxr-xr-x 1 root root 160 May 16 12:44 block
lrwxrwxrwx 1 root root 3 May 16 12:44 cdrom -> sr0
drwxr-xr-x 2 root root 60 May 16 12:44 cpu

设备文件按字母顺序排列显示。其中一些设备名称如cdrom和cpu较为直观,而其他则相对晦涩。值得注意的是sda1、sda2、sda3、sdb和sdb1等条目,它们分别代表了硬盘及其分区、USB存储设备及其分区。

brw-rw---- 1 root root 8, 0 May 16 12:44 sda
brw-rw---- 1 root root 8, 1 May 16 12:44 sda1
brw-rw---- 1 root root 8, 2 May 16 12:44 sda2
brw-rw---- 1 root root 8, 5 May 16 12:44 sda5
brw-rw---- 1 root root 8, 16 May 16 12:44 sdb
brw-rw---- 1 root root 8, 17 May 16 12:44 sdb1

Linux如何表示存储设备

Linux采用逻辑标签来标识挂载到文件系统的驱动器。这些标签会根据设备的挂载时间和位置动态变化,这意味着同一个物理设备在不同时刻可能会获得不同的标识符。

早期Linux系统使用fd0表示软盘驱动器,使用hda表示硬盘。虽然在某些遗留系统中仍可能遇到这种表示方式,但现代系统已经很少见到软盘设备。采用IDE或E-IDE接口的传统硬盘仍使用hda形式的标识,而新型的SATA(串行ATA)接口驱动器和SCSI硬盘则采用sda的命名方式。

存储设备往往会划分为多个分区,这些分区在Linux中用数字标识。当系统包含多个存储设备时,Linux通过字母递增的方式为它们命名:第一个设备为sda,第二个为sdb,依此类推。这种命名规则中,sd后的字母通常被称为主编号。

设备文件

描述

sda

第一个SATA硬盘

sdb

第二个SATA硬盘

sdc

第三个SATA硬盘

sdd

第四个SATA硬盘

驱动器分区

在存储管理中,驱动器常被划分为多个分区以实现更有效的资源管理和数据隔离。例如,你可能需要将交换文件、用户主目录和根目录分别置于不同分区——这种策略有助于资源共享管理和权限控制。Linux使用设备标识符后的数字来标记各个分区。因此,第一个SATA驱动器(sda)的第一个分区表示为sda1,第二个分区为sda2,以此类推。

分区

描述

sda1

第一个SATA驱动器的第一个分区

sda2

第一个驱动器的第二个分区

sda3

第一个驱动器的第三个分区

sda4

第一个驱动器的第四个分区

在安全分析过程中,了解系统的分区布局至关重要。我们可以使用fdisk工具来查看分区信息:

kali > fdisk -l
Disk /dev/sda: 20GiB, 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: 0x7c06cd70Device Boot Start End Sectors Size Id Type
/dev/sda1 * 2048 39174143 39172096 18.7G 83 Linux
/dev/sda2 39176190 41940991 2764802 1.3G 5 Extended
/dev/sda5 39176192 41940991 2764800 1.3G 82 Linux swap / SolarisDisk /dev/sdb: 29.8 GiB, 31999393792 bytes, 62498816 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: 0xc3072e18Device Boot Start End Sectors Size Id Type
/dev/sdb1 32 62498815 62498784 29.8G 7 HPFS/NTFS/exFAT

在这个输出中,我们可以看到sda1、sda2和sda5构成了虚拟机的20GB虚拟磁盘,包括一个交换分区(sda5)作为虚拟RAM的扩展,类似于Windows的页面文件。

第二部分显示了一个标识为sdb1的设备——字母b表明这是一个独立的设备。这里是一个64GB的闪存驱动器,使用HPFS/NTFS/ExFAT文件系统。这些文件系统类型通常见于macOS和Windows系统,在取证分析中可能提供有价值的线索,指示设备的来源系统。

字符设备和块设备

在/dev目录中,设备文件名的第一个字符(c或b)具有特殊含义。这些标识反映了设备的数据传输方式:

  • 字符设备(c):以字符为单位进行数据传输,如键盘、鼠标等输入设备

  • 块设备(b):以数据块为单位传输,如硬盘、DVD驱动器等存储设备

理解设备类型对于安全分析和性能优化具有重要意义。

使用lsblk列出块设备及其信息

lsblk命令(list block devices的缩写)能够以树状结构显示系统中所有块设备的基本信息:

kali > lsblk
Name   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
fd0    2:0    1    4K  0 disk
sda    8:0    0   20G  0 disk
├─sda1 8:1    0 18.7G  0 part /
├─sda2 8:2    0    1K  0 part
└─sda5 8:5    0  1.3G  0 part [SWAP]
sdb    8:16   1 29.8G  0 disk
└─sdb1 8:17   1 29.8G  0 part /media/USB3.0
sr0    11:0   1  2.7G  0 rom

挂载和卸载

在大多数现代Linux系统中,存储设备连接时会自动挂载。但对安全专业人员而言,理解手动挂载过程仍然重要,因为在特殊场景下可能需要使用特定的挂载选项。

存储设备必须同时满足物理连接和逻辑挂载才能被操作系统访问。"挂载"这个术语源自早期计算机时代,当时存储介质需要物理地"挂"到计算机系统上。

设备在目录树中的连接点被称为挂载点。Linux主要使用两个标准挂载点:

  • /mnt:通常用于内部硬盘

  • /media:主要用于外部USB设备(如闪存驱动器和外部硬盘)

手动挂载存储设备

某些Linux环境下需要手动挂载驱动器。挂载命令的基本语法如下:

kali > mount /dev/sdb1 /mnt

注意:挂载点必须是空目录,否则挂载操作会暂时遮蔽该目录下的原有内容。同样,要挂载闪存驱动器sdc1到/media目录:

kali > mount /dev/sdc1 /media

系统会在/etc/fstab(文件系统表)文件中维护挂载信息,每次启动时都会读取该文件。

使用umount卸载

安全移除存储设备前需要先执行卸载操作,这与Windows/Mac中的"弹出"设备概念类似。使用umount命令(注意拼写没有'n')执行卸载:

kali > umount /dev/sdb1

重要提示:正在被访问的设备无法卸载,系统会返回错误信息。

监控文件系统

对于安全专业人员和系统管理员来说,监控文件系统状态是一项核心技能。这包括获取挂载设备信息、检查和修复错误等。

获取挂载磁盘的信息

df命令(disk free的缩写)提供了存储设备的使用情况统计:

kali > df
Filesystem      1K-Blocks      Used Available Use% Mounted on
rootfs          19620732  17096196   1504788  92% /
udev               10240         0     10240   0% /dev
/dev/sdb1      29823024 29712544    110480  99% /media/USB3.0

输出显示了每个文件系统的总容量、已用空间和可用空间。例如,根文件系统使用了92%的空间,而USB驱动器几乎已满(99%)。

检查错误

fsck命令(file system check的缩写)用于检查和修复文件系统错误:

kali > fsck
fsck from util-linux 2.20.1
e2fsck 1.42.5 (29-Jul-2012)
/dev/sda1 is mounted
e2fsck: Cannot continue, aborting.

卸载设备进行文件系统检查

执行fsck前必须先卸载设备:

kali > umount /dev/sdb1
kali > fsck -p /dev/sdb1
fsck from util-linux 2.30.2
exfatfsck 1.2.7
Checking file system on /dev/sdb1.
File system version 1.0
Sector size 512 bytes
Cluster size 32 KB
Volume size 7648 MB
Used space 1265 MB
Available space 6383 MB
Totally 20 directories and 111 files.
File system checking finished. No errors found.

总结

深入理解Linux存储设备管理对安全专业人员至关重要。设备命名规则、挂载机制、文件系统检查等知识不仅有助于日常系统维护,更是进行安全评估和事件响应的基础。特别是在涉及数据恢复、取证分析等场景时,这些技能尤为重要。

相关文章:

Linux存储管理之核心秘密(The Core Secret of Linux Storage Management)

Linux存储管理之核心秘密 如果你来自Windows环境,那么Linux处理和管理存储设备的方式对你而言可能显得格外不同。我们知道,Linux的文件系统并不采用Windows那样的物理驱动器表示方式(如C:、D:或E:),而是构建了一个以&…...

excel精简使用工具

1.获取sheet1的行填充到sheet2的列 希望在 Excel 中使用 INDEX 函数从不同的列中提取数据,并且每一行都引用不同的列。为了实现这个目标,你可以使用 COLUMN 函数来动态获取列的偏移量。 为了避免手动输入每个单元格的公式,你可以使用以下公…...

Flutter鸿蒙化 在鸿蒙应用中添加Flutter页面

前言 今天这节课我们讲一下 在鸿蒙应用中添加Flutter页面。 作用: 之前有很多朋友和网友问我鸿蒙能不能使用Flutter开发,他们的项目已经用Flutter开发成熟了有什么好的方案呢,今天讲到这个就可以很好的解决他们的问题,例如我们正式项目中可能是一部分native 开发 一部分…...

为什么页面无法正确显示?都有哪些HTML和CSS相关问题?

页面无法正确显示可能由多种原因导致,通常与HTML和CSS的结构、语法错误、浏览器兼容性、资源加载等问题有关。以下是一些常见的原因及其解决方法,结合实际项目代码示例进行讲解: 1. HTML 结构错误 HTML 标签的缺失或错误可能导致页面无法正…...

如何制作一份出色的公司介绍PPT?

制作一份公司介绍的PPT需要精心设计,以确保内容既专业又吸引人。以下是一个基本的框架和一些建议,帮助您创建一份有效的公司介绍PPT: PPT标题页 标题:公司全称(可使用公司Logo作为背景或嵌入标题中)副标题…...

Selenium 进行网页自动化操作的一个示例,绕过一些网站的自动化检测。python编程

这段代码是使用 Selenium 进行网页自动化操作的一个示例,主要目的是在加载网页时执行一些自定义的 JavaScript 代码,并等待页面上某个元素的出现。以下是代码的详细解释: ### 代码解释 #### 导入必要的模块 python from selenium.webdriver…...

HashMap和HashTable的区别

1、HashMap是线程不安全的,HashTable是线程安全的 HashMap:Fail-fast 机制。表示快速失败,在集合遍历过程中,一旦发现容器中的数据被修改了,会立刻抛出ConcurrentModificationException异常,从而导致遍历失…...

使用redis来进行调优有哪些方案?

Redis的调优方案可以从多个方面进行,以下是一些常见的优化方法及代码示例: 1.使用管道(Pipelining) 管道技术可以减少客户端与Redis之间的交互次数,从而提高性能。在批量操作时,通过管道可以一次性发送多个…...

macOS 中,默认的 Clang 编译器和 Homebrew 安装的 GCC 都不包含 bits/stdc++.h 文件

在 macOS 中,默认的 Clang 编译器和 Homebrew 安装的 GCC 都不包含 bits/stdc.h 文件,因为它是一个 非标准 的头文件,主要由 MinGW 和某些 Linux 平台的 GCC 提供。 解决方案 : 手动创建 bits/stdc.h 1. 创建文件夹和文件 在你的 GCC 标准…...

2012mfc,自绘列表控件

原文 使用常用控件版本4.70中的自定义绘画功能自定义列表控件的外观. 介绍 常见控件的4.70版引入了一项叫自定义绘画的功能. 可按轻量易用的自画版本对待自定义绘画.易用性来自,即只需处理一条消息(NM_CUSTOMDRAW),且你可让窗口为你干活,因此你不必完成物主绘画中的所有粗活…...

vue3运行时执行过程步骤

在 Vue 3 中,运行时的执行过程是一个复杂但高效的机制,主要包括初始化应用、渲染、响应式更新和销毁等阶段。以下是 Vue 3 运行时的执行过程的核心步骤和流程: 1. 应用初始化 1.1 创建 Vue 应用 调用 createApp 方法,创建一个 V…...

常用的AT命令,用于查看不同类型的网络信息

文章目录 1. ATCSQ‌:2. ATCREG‌:‌3. ATCOPS‌:4. ATCGATT‌:5. ATCGPADDR‌: 在AT命令集中,用于查看网络信息的命令有多种,具体取决于所使用的设备和模块。以下是一些常用的AT命令&#xff0…...

Vue3组件通讯——自定义事件(子->父)

需求如下: 1.在子组件中,当用户点击提交按钮后,更新数据库 2.数据更新成功后,子组件通知父组件getUserInfo函数,重新获取数据,同步更新 3.子组件等待getUserInfo函数执行完毕后,调用init函数…...

GLSL 着色器语言

GLSL 着色器语言 1. 着色器语言基础1.1 数据类型1.2 数据类型的基本使用1.3 运算符1.4 各个数据类型的构造函数1.5 类型转换1.6 存储限定符1.7 插值限定符1.8 一致块1.9 layout 限定符1.10 流程控制1.11 函数的声明和使用1.12 片元着色器中浮点及整型变量精度的指定1.13 程序的…...

如何创建一个 Vue.js 工程

创建一个 Vue.js 工程 可以分为以下几个步骤: 安装 Node.js 和 npm:Vue.js 依赖于 Node.js 和 npm,因此首先需要在计算机上安装 Node.js 和 npm。可以从 Node.js 的官方网站(https://nodejs.org/)下载并安装。 安装 V…...

Mysql 性能优化:覆盖索引

概述 覆盖索引(Covering Index)是一个 MySQL 查询优化技术,它指的是一个索引包含了查询所需的所有字段的数据,因此不需要回表(访问数据表的行)就可以完成查询。使用覆盖索引可以显著提高查询性能&#xff…...

vulnhub靶场【DC系列】之7

前言 靶机:DC-7,IP地址为192.168.10.13 攻击:kali,IP地址为192.168.10.2 都采用VMWare,网卡为桥接模式 对于文章中涉及到的靶场以及工具,我放置在网盘中,链接:https://pan.quark…...

iOS - 消息机制

1. 基本数据结构 // 方法结构 struct method_t {SEL name; // 方法名const char *types; // 类型编码IMP imp; // 方法实现 };// 类结构 struct objc_class {Class isa;Class superclass;cache_t cache; // 方法缓存class_data_bits_t bits; // 类的方法…...

Wireshark 学习笔记1

1.wireshark是什么 wireshark是一个可以进行数据包的捕获和分析的软件 2.基本使用过程 (1)选择合适的网卡 (2)开始捕获数据包 (3)过滤掉无用的数据包 (4)将捕获到的数据包保存为文件…...

Oracle OCP考试常见问题之线上考试流程

首先要注意的是:虽然Oracle官方在国际上取消了获得OCP认证需要培训记录的要求,但在中国区,考生仍然需要参加Oracle的官方或者其合作伙伴组织的培训,并且由Oracle授权培训中心向Oracle提交学员培训记录。考生只有在完成培训并通过考…...

SpringBoot-17-MyBatis动态SQL标签之常用标签

文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…...

网络六边形受到攻击

大家读完觉得有帮助记得关注和点赞!!! 抽象 现代智能交通系统 (ITS) 的一个关键要求是能够以安全、可靠和匿名的方式从互联车辆和移动设备收集地理参考数据。Nexagon 协议建立在 IETF 定位器/ID 分离协议 (…...

云原生核心技术 (7/12): K8s 核心概念白话解读(上):Pod 和 Deployment 究竟是什么?

大家好,欢迎来到《云原生核心技术》系列的第七篇! 在上一篇,我们成功地使用 Minikube 或 kind 在自己的电脑上搭建起了一个迷你但功能完备的 Kubernetes 集群。现在,我们就像一个拥有了一块崭新数字土地的农场主,是时…...

Vue记事本应用实现教程

文章目录 1. 项目介绍2. 开发环境准备3. 设计应用界面4. 创建Vue实例和数据模型5. 实现记事本功能5.1 添加新记事项5.2 删除记事项5.3 清空所有记事 6. 添加样式7. 功能扩展:显示创建时间8. 功能扩展:记事项搜索9. 完整代码10. Vue知识点解析10.1 数据绑…...

Day131 | 灵神 | 回溯算法 | 子集型 子集

Day131 | 灵神 | 回溯算法 | 子集型 子集 78.子集 78. 子集 - 力扣(LeetCode) 思路: 笔者写过很多次这道题了,不想写题解了,大家看灵神讲解吧 回溯算法套路①子集型回溯【基础算法精讲 14】_哔哩哔哩_bilibili 完…...

蓝牙 BLE 扫描面试题大全(2):进阶面试题与实战演练

前文覆盖了 BLE 扫描的基础概念与经典问题蓝牙 BLE 扫描面试题大全(1):从基础到实战的深度解析-CSDN博客,但实际面试中,企业更关注候选人对复杂场景的应对能力(如多设备并发扫描、低功耗与高发现率的平衡)和前沿技术的…...

dedecms 织梦自定义表单留言增加ajax验证码功能

增加ajax功能模块&#xff0c;用户不点击提交按钮&#xff0c;只要输入框失去焦点&#xff0c;就会提前提示验证码是否正确。 一&#xff0c;模板上增加验证码 <input name"vdcode"id"vdcode" placeholder"请输入验证码" type"text&quo…...

MySQL 8.0 OCP 英文题库解析(十三)

Oracle 为庆祝 MySQL 30 周年&#xff0c;截止到 2025.07.31 之前。所有人均可以免费考取原价245美元的MySQL OCP 认证。 从今天开始&#xff0c;将英文题库免费公布出来&#xff0c;并进行解析&#xff0c;帮助大家在一个月之内轻松通过OCP认证。 本期公布试题111~120 试题1…...

Web 架构之 CDN 加速原理与落地实践

文章目录 一、思维导图二、正文内容&#xff08;一&#xff09;CDN 基础概念1. 定义2. 组成部分 &#xff08;二&#xff09;CDN 加速原理1. 请求路由2. 内容缓存3. 内容更新 &#xff08;三&#xff09;CDN 落地实践1. 选择 CDN 服务商2. 配置 CDN3. 集成到 Web 架构 &#xf…...

热烈祝贺埃文科技正式加入可信数据空间发展联盟

2025年4月29日&#xff0c;在福州举办的第八届数字中国建设峰会“可信数据空间分论坛”上&#xff0c;可信数据空间发展联盟正式宣告成立。国家数据局党组书记、局长刘烈宏出席并致辞&#xff0c;强调该联盟是推进全国一体化数据市场建设的关键抓手。 郑州埃文科技有限公司&am…...