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

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

平面坐标转大地坐标(arcgisPro中进行)

1、将需要转换的红线导入arcgisPro中,如下: 2、在地图菜单栏中,选择坐标转换工具,如下: 3、打开坐标转换工具 4、开启捕捉 5、 设置大地坐标显示格式 6、如下: 7、显示如图: 8、再依次添加几个待…

QT 端口扫描附加功能实现 端口扫描5

上篇QT 下拉菜单设置参数 起始端口/结束端口/线程数量 端口扫描4-CSDN博客 在扫描结束后设置Scan按钮为可用,并提示扫描完成 在 MainWindow 类中添加一个成员变量来跟踪正在进行的扫描任务数量: 在 MainWindow 的构造函数中初始化 activeScanTasks&…

使用WPF在C#中制作下载按钮

本示例使用 WPF 制作一个下载按钮。以下 XAML 代码显示了程序如何构建该按钮。 <Window x:Class"howto_download_button.Window1"xmlns"http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x"http://schemas.microsoft.com/winfx/…

Unity Burst详解

【简介】 Burst是Unity的编译优化技术&#xff0c;优化了从C#代码编译成Native代码的过程&#xff0c;经过编译优化后代码有更高的运行效率。 在Unity中使用Burst很简单&#xff0c;在方法或类前加上[BurstCompile]特性即可。在构建时编译代码的步骤&#xff0c;Burst编译器会…

Redis 数据库源码分析

Redis 数据库源码分析 我们都知道Redis是一个 <key,value> 的键值数据库&#xff0c;其实也就是一个 Map。如果让我来实现这样一个 Map&#xff0c;我肯定是用数组&#xff0c;当一个 key 来的时候&#xff0c;首先进行 hash 运算&#xff0c;接着对数据的 length 取余&…

基于YOLO11的无人机视角下羊群检测系统

基于YOLO11的无人机视角下羊群检测系统 (价格90) 包含 [sheep] 【羊】 1个类 通过PYQT构建UI界面&#xff0c;包含图片检测&#xff0c;视频检测&#xff0c;摄像头实时检测。 &#xff08;该系统可以根据数据训练出的yolo11的权重文件&#xff0c;运用在其他检测系统上…

WebRTC 在视频联网平台中的应用:开启实时通信新篇章

在当今这个以数字化为显著特征的时代浪潮之下&#xff0c;实时通信已然稳稳扎根于人们生活与工作的方方面面&#xff0c;成为了其中不可或缺的关键一环。回首日常生活&#xff0c;远程办公场景中的视频会议让分散各地的团队成员能够跨越地理距离的鸿沟&#xff0c;齐聚一堂共商…

【Go学习】-02-1-标准库:fmt、os、time

【Go学习】-02-1-标准库&#xff1a;fmt、os、time 1 fmt标准库1.1 输出1.1.1 fmt.Print1.1.2 格式化占位符1.1.2.1 通用占位符1.1.2.2 布尔型1.1.2.3 整型1.1.2.4 浮点数与复数1.1.2.5 字符串和[]byte1.1.2.6 指针1.1.2.7 宽度标识符1.1.2.8 其他flag 1.1.3 Fprint1.1.4 Sprin…

快速入门Spring Cloud Alibaba,轻松玩转微服务

​ 1 快速入门Spring Cloud Alibaba&#xff0c;轻松玩转微服务 1.1 架构 架构图&#xff1a; 1.2 项目结构 1.2.1 系统框架版本 版本适配查看&#xff1a;https://sca.aliyun.com/docs/2023/overview/version-explain/ Spring Boot Version &#xff1a;3.2.4 Spring Clo…

腾讯云AI代码助手-每日清单助手

作品简介 每日清单助手是一款可以记录生活的小程序&#xff0c;在人们需要记录时使用&#xff0c;所以根据这个需求来创建的这款应用工具&#xff0c;使用的是腾讯云AI代码助手来生成的所有代码&#xff0c;使用方便&#xff0c;快捷&#xff0c;高效。 技术架构 python语言…

Pytorch学习12_最大池化的使用

输入图像 import torch from torch import nninputtorch.tensor([[1,2,0,3,1],[0,1,2,3,1],[1,2,1,0,0],[5,2,3,1,1],[2,1,0,1,1]]) inputtorch.reshape(input,(-1,1,5,5))#二维张量转换为一个四维张量。(batch_size, channels, height, width)print(input.shape)ceil_modeTrue…

009:传统计算机视觉之边缘检测

本文为合集收录&#xff0c;欢迎查看合集/专栏链接进行全部合集的系统学习。 合集完整版请参考这里。 本节来看一个利用传统计算机视觉方法来实现图片边缘检测的方法。 什么是边缘检测&#xff1f; 边缘检测是通过一些算法来识别图像中物体之间或者物体与背景之间的边界&…

HarmonyOS Next系列之华为账号一键登录功能实现(十四)

系列文章目录 HarmonyOS Next 系列之省市区弹窗选择器实现&#xff08;一&#xff09; HarmonyOS Next 系列之验证码输入组件实现&#xff08;二&#xff09; HarmonyOS Next 系列之底部标签栏TabBar实现&#xff08;三&#xff09; HarmonyOS Next 系列之HTTP请求封装和Token…

大数据架构设计:数据分层治理的全景指南

大数据架构设计&#xff1a;数据分层治理的全景指南 在大数据架构中&#xff0c;数据分层治理是一种被广泛采用的设计模式&#xff0c;其核心目的是为数据赋予结构化管理的能力&#xff0c;降低复杂度&#xff0c;并为数据的多样化使用场景提供保障。在这篇文章中&#xff0c;…

unity学习14:unity里的C#脚本的几个基本生命周期方法, 脚本次序order等

目录 1 初始的C# 脚本 1.1 初始的C# 脚本 1.2 创建时2个默认的方法 2 常用的几个生命周期方法 2.1 脚本的生命周期 2.1.1 其中FixedUpdate 方法 的时间间隔&#xff0c;是在这设置的 2.2 c#的基本语法别搞混 2.2.1 基本的语法 2.2.2 内置的方法名&#xff0c;要求更严…

Ubuntu中使用miniconda安装R和R包devtools

安装devtools环境包 sudo apt-get install gfortran -y sudo apt-get install build-essential -y sudo apt-get install libxt-dev -y sudo apt-get install libcurl4-openssl-dev -y sudo apt-get install libxml2.6-dev -y sudo apt-get install libssl-dev -y sudo apt-g…

如何在 Windows 10/11 上录制带有音频的屏幕 [3 种简单方法]

无论您是在上在线课程还是参加在线会议&#xff0c;您都可能需要在 Windows 10/11 上录制带有音频的屏幕。互联网上提供了多种可选方法。在这里&#xff0c;本博客收集了 3 种最简单的方法来指导您如何在 Windows 10/11 上使用音频进行屏幕录制。请继续阅读以探索&#xff01; …

Python 中几个库的安装与测试

一、jupyter 安装步骤 确保系统已经安装了Python&#xff08;建议 Python 3.6 及以上版本&#xff09;。点击WinR输入cdm进入命令提示符窗口&#xff0c;然后输入pip install jupyter&#xff0c;按下回车键。等待安装过程完成。安装过程中&#xff0c;你会看到命令行输出安装…

【阅读笔记】基于FPGA的红外图像二阶牛顿插值算法的实现

图像缩放技术在图像显示、传输、分析等多个领域中扮演着重要角色。随着数字图像处理技术的发展&#xff0c;对图像缩放质量的要求也越来越高。二阶牛顿插值因其在处理图像时能够较好地保持边缘特征和减少细节模糊&#xff0c;成为了图像缩放中的一个研究热点。 一、 二阶牛顿插…

5.1 数据库:INSERT 插入语句

工作中增删改查这四类sql语句里边用的最多的就是查询语句。因为绝大多数的软件系统都是读多写少的&#xff0c;而且查询的条件也是各种各样。本节课程我们来学习下一个DML语句&#xff0c;那就是向数据表里面写入记录的insert语句。Insert语句是可以向数据表里边写入&#xff0…