当前位置: 首页 > 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提交学员培训记录。考生只有在完成培训并通过考…...

装饰模式(Decorator Pattern)重构java邮件发奖系统实战

前言 现在我们有个如下的需求,设计一个邮件发奖的小系统, 需求 1.数据验证 → 2. 敏感信息加密 → 3. 日志记录 → 4. 实际发送邮件 装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其…...

QMC5883L的驱动

简介 本篇文章的代码已经上传到了github上面,开源代码 作为一个电子罗盘模块,我们可以通过I2C从中获取偏航角yaw,相对于六轴陀螺仪的yaw,qmc5883l几乎不会零飘并且成本较低。 参考资料 QMC5883L磁场传感器驱动 QMC5883L磁力计…...

Objective-C常用命名规范总结

【OC】常用命名规范总结 文章目录 【OC】常用命名规范总结1.类名(Class Name)2.协议名(Protocol Name)3.方法名(Method Name)4.属性名(Property Name)5.局部变量/实例变量(Local / Instance Variables&…...

1688商品列表API与其他数据源的对接思路

将1688商品列表API与其他数据源对接时,需结合业务场景设计数据流转链路,重点关注数据格式兼容性、接口调用频率控制及数据一致性维护。以下是具体对接思路及关键技术点: 一、核心对接场景与目标 商品数据同步 场景:将1688商品信息…...

在web-view 加载的本地及远程HTML中调用uniapp的API及网页和vue页面是如何通讯的?

uni-app 中 Web-view 与 Vue 页面的通讯机制详解 一、Web-view 简介 Web-view 是 uni-app 提供的一个重要组件,用于在原生应用中加载 HTML 页面: 支持加载本地 HTML 文件支持加载远程 HTML 页面实现 Web 与原生的双向通讯可用于嵌入第三方网页或 H5 应…...

力扣热题100 k个一组反转链表题解

题目: 代码: func reverseKGroup(head *ListNode, k int) *ListNode {cur : headfor i : 0; i < k; i {if cur nil {return head}cur cur.Next}newHead : reverse(head, cur)head.Next reverseKGroup(cur, k)return newHead }func reverse(start, end *ListNode) *ListN…...

Webpack性能优化:构建速度与体积优化策略

一、构建速度优化 1、​​升级Webpack和Node.js​​ ​​优化效果​​&#xff1a;Webpack 4比Webpack 3构建时间降低60%-98%。​​原因​​&#xff1a; V8引擎优化&#xff08;for of替代forEach、Map/Set替代Object&#xff09;。默认使用更快的md4哈希算法。AST直接从Loa…...

jmeter聚合报告中参数详解

sample、average、min、max、90%line、95%line,99%line、Error错误率、吞吐量Thoughput、KB/sec每秒传输的数据量 sample&#xff08;样本数&#xff09; 表示测试中发送的请求数量&#xff0c;即测试执行了多少次请求。 单位&#xff0c;以个或者次数表示。 示例&#xff1a;…...

日常一水C

多态 言简意赅&#xff1a;就是一个对象面对同一事件时做出的不同反应 而之前的继承中说过&#xff0c;当子类和父类的函数名相同时&#xff0c;会隐藏父类的同名函数转而调用子类的同名函数&#xff0c;如果要调用父类的同名函数&#xff0c;那么就需要对父类进行引用&#…...

关于easyexcel动态下拉选问题处理

前些日子突然碰到一个问题&#xff0c;说是客户的导入文件模版想支持部分导入内容的下拉选&#xff0c;于是我就找了easyexcel官网寻找解决方案&#xff0c;并没有找到合适的方案&#xff0c;没办法只能自己动手并分享出来&#xff0c;针对Java生成Excel下拉菜单时因选项过多导…...