Linux文件系统以及性能分析

1 Windows File System
1.1 Windows分区知识
因为保存主分区信息的MBR(Master Boot Record)只能容纳4个分区信息,也就是说只能有4个主分区。如果你想要更多的分区,只能将其中的一个主分区再划分,再划分出来的分区叫做逻辑分区,被划分的主分区又叫扩展分区,逻辑分区信息是保存在EBR(Extended Boot Record)里的。Linux系统中规定了主分区号为sda1-sda4或者hda1-hda4,而逻辑分区只能从sda5开始。

Q:U盘被识别为/dev/sda4,而不是sda1?
A:因为U盘的这个分区写在分区表(MBR DPT,Disk Partition Table)的第四项所以是sda4(DPT每个entry的第一个字节为引导标志,0x80表示活动分区,0x00表示非活动分区),可以用命令重新写到第一项。

sudo sfdisk -d /dev/sda > sda_table
gedit sda_table
sudo sfdisk /dev/sda < sda_table
或者
dd if=/dev/sda of=./mbr.bin bs=512 count=1

1.2 MBR
MBR分为GRUB.MBR和DOS.MBR。

由于硬盘上扇区从偏移0到偏移62属于同一个磁道0,虽然DOS.MBR仅占用一个扇区,但是需要将DOS.MBR后面的偏移1到偏移62保留,所以磁盘上第一个分区的第一个扇区是从偏移63开始的。
USB-ZIP和USB-FDD会将U盘的第一个扇区格式化成DOS.PBR而不是DOS.MBR。
USB-FDD和USB-ZIP的来历:软盘的容量小,没有分区结构,所以软盘是没有MBR的,整个软盘只有一个分区,第一个扇区就是PBR。

MBR实际上也是一个bootloader,可以使用如下命令获得MBR的内容
dd if=/dev/sda of=./mbr.bin bs=512 count=1

MBR:扇区内偏移地址0 ~ 0x1BD
DPT:DOS Partition Table,扇区内偏移地址0x1BE~ 0x1FD,其中又分为4个分区表:

第一个分区表:0x1BE ~ 0x1CD
第二个分区表:0x1CE ~ 0x1DD
第三个分区表:0x1DE ~ 0x1ED
第四个分区表:0x1EE ~ 0x1FD

DPT阐述
字节偏移  说明
0       引导标志。若值为80H表示活动分区,若值为00H表示非活动分区。
1-3   本分区的起始磁头号、扇区号、柱面号。其中:磁头号--第1字节;扇区号--第2字节的低6位;柱面号—为第2字节高2位+第3字节8位
4       分区类型符:
00H——表示该分区未用(即没有指定);
01h——FAT12基本分区
04H——FAT16基本分区
06H——big FAT16基本分区;
0BH——FAT32基本分区;
05H——扩展分区;
07H——NTFS分区;
0FH——(LBA模式)扩展分区(83H为Linux分区等)
5-7   本分区的结束磁头号、扇区号、柱面号。其中:
磁头号——第1字节;
扇区号——第2字节的低6位;
柱面号——第2字节的高2位+第3字节
8-11          分区起始扇区数,指分区相对于记录该分区的分区表的扇区位置之差 (该分区表:LBA = 0x0)
12-15        本分区的总扇区数

1.3 PBR
偏移量 字节数 含义
00--02H 3  跳转到引导代码
03--0AH 8  厂商标识和DOS版本
0B--0CH 2  BPB参数信息,每个扇区的字节数
0DH 1  每个分配簇的扇区数(2的整数倍)
0E--0FH 2  保留扇区数
10H 1  FAT个数
11--12H 2  根目录登记项数(所允许的最大数值)
13--14H 2  磁盘扇区总数
15H 1  磁介质类型说明
16--17H 2  每个FAT表所占的扇区数
18--19H 2  每个磁道(柱面)的扇区数
1A--1BH 2  磁头的个数
1C--1FH 4  当前DOS分区前面的隐含扇区数
27--2AH 4  FAT16格式磁盘系列号
2B--35H 10  FAT16卷标名
36--3AH 5  FAT16磁盘格式标志

1.4 python解析MBR和PBR
1.4.1 parse_mbr.py
import hashlib
import sys
import os

# dd if=/dev/block/sda of=/data/mbr.hex bs=512 count=1

def print_usage():
    print("Usage:\n" + sys.argv[0] + " MBR file\n")

def parse_mbr():
    f = open(sys.argv[1], 'r')

    # PART 1
    print("PART 1")
    offset = 0x1be
    f.seek(offset)
    str_data = f.read(16)
    print(" ".join(hex(ord(n)) for n in str_data))
    print("boot: %r" % str_data[0])
    print("FS Type: %r" % str_data[4])

    # PART 2
    print("\nPART 2")
    offset = 0x1ce
    f.seek(offset)
    str_data = f.read(16)
    print(" ".join(hex(ord(n)) for n in str_data))
    print("boot: %r" % str_data[0])
    print("FS Type: %r" % str_data[4])

    # PART 3
    print("\nPART 3")
    offset = 0x1de
    f.seek(offset)
    str_data = f.read(16)
    print(" ".join(hex(ord(n)) for n in str_data))
    print("boot: %r" % str_data[0])
    print("FS Type: %r" % str_data[4])

    # PART 4
    print "\nPART 4"
    offset = 0x1ee
    f.seek(offset)
    str_data = f.read(16)
    print(" ".join(hex(ord(n)) for n in str_data))
    print("boot: %r" % str_data[0])
    print("FS Type: %r" % str_data[4])

f.close()

if __name__ == '__main__':
    if len(sys.argv) < 2:
        print_usage()
        exit()
    parse_mbr()

1.4.2 parse_pbr.py
import hashlib
import sys
import os

# dd if=/dev/block/sda1 of=/data/pbr.hex bs=512 count=1

def print_usage():
    print("Usage:\n" + sys.argv[0] + " PBR file\n")

# http://elm-chan.org/docs/fat_e.html
def parse_pbr():
    f = open(sys.argv[1], 'rb')

    offset = 0
    f.seek(offset)
    str_data = f.read(3)
    print("Boot Code: " +
        " ".join(hex(ord(n)) for n in str_data))

    str_data = f.read(8)
    print("DOS Ver: " + str_data)

    str_data = f.read(2)
    print("Bytes per Sector: " +
        " ".join(hex(ord(n)) for n in str_data))

    str_data = f.read(1)
    print("Sectors per Cluster: " +
        " ".join(hex(ord(n)) for n in str_data))

    str_data = f.read(2)
    print("Num of Reserved Sectors: " +
        " ".join(hex(ord(n)) for n in str_data))

    str_data = f.read(1)
    print("Num of FAT: " +
        " ".join(hex(ord(n)) for n in str_data))

    str_data = f.read(2)
    print("FAT12/16 - Num of Root Dirs: " +
        " ".join(hex(ord(n)) for n in str_data))

    offset = 0x13
    f.seek(offset)
    str_data = f.read(2)
    print("FAT12/16 - Num of Sectors: " +
        " ".join(hex(ord(n)) for n in str_data))

    str_data = f.read(1)
    print("Media Type: " +
        " ".join(hex(ord(n)) for n in str_data))

    offset = 0x16
    f.seek(offset)
    str_data = f.read(2)
    print("FAT12/16 - Sectors per FAT: " +
        " ".join(hex(ord(n)) for n in str_data))

    offset = 0x1C
    f.seek(offset)
    str_data = f.read(4)
    print("Hide Sectors before EBR: " +
        " ".join(hex(ord(n)) for n in str_data))

    offset = 0x20
    f.seek(offset)
    str_data = f.read(4)
    print("Num of Huge Sectors: " +
        " ".join(hex(ord(n)) for n in str_data))

    print("\n")
    offset = 39
    f.seek(offset)
    str_data = f.read(4)
    print("FAT12/16 - Volume ID: " +
        " ".join(hex(ord(n)) for n in str_data))

    offset = 43
    f.seek(offset)
    str_data = f.read(11)
    print("FAT12/16 - Label: " + str_data)

    offset = 54
    f.seek(offset)
    str_data = f.read(8)
    print("FAT12/16 - FS Type: " + str_data)

    print "\n"
    offset = 36
    f.seek(offset)
    str_data = f.read(4)
    print("FAT32 - Sectors per FAT: " +
        " ".join(hex(ord(n)) for n in str_data))

    offset = 44
    f.seek(offset)
    str_data = f.read(4)
    print("FAT32 - Root Cluster: " +
        " ".join(hex(ord(n)) for n in str_data))

    offset = 0x43
    f.seek(offset)
    str_data = f.read(4)
    print("FAT32 - Volume ID: " +
        " ".join(hex(ord(n)) for n in str_data))

    offset = 0x47
    f.seek(offset)
    str_data = f.read(11)
    print("FAT32 - Label: " +
        " ".join(hex(ord(n)) for n in str_data) +
        ", " + str_data)

    offset = 0x52
    f.seek(offset)
    str_data = f.read(8)
    print("FAT32 - FS Type: " +
        " ".join(hex(ord(n)) for n in str_data) +
        ", " + str_data)

    f.close()

if __name__ == '__main__':
    if len(sys.argv) < 2:
        print_usage()
        exit()
    parse_pbr()

1.5 FAT32分配单元大小
FAT32分配单元大小 - 簇的大小,譬如16KB,命令chkdsk f:\

2 Linux文件系统
2.1 GRUB简介
GRUB镜像组成:
- GRUB.MBR(boot.img)
- 硬盘扇区offset 1 到offset 62放置GRUB的core.img
- /boot分区的boot/grub/grub.cfg

2.2 block设备性能分析工具
CONFIG_BLK_DEV_IO_TRACE
@ external/e2fsprogs/debugfs
@ external/blktrace
需要加下面的声明在blkparse.c,否则编译出错。
extern int strverscmp (const char *s1, const char *s2);

blktrace -d /dev/block/sda -o - | blkparse -i - -o /data/blk.parsed

根据扇区offset找到具体的文件:
ls -l /dev/block
debugfs -R "stats" /dev/block/sda1 |grep "Block size"

BLKNO=SECTOR_OFFSET/8
debugfs -R "icheck $BLKNO" /dev/block/sda1

GOT THE INODE NUMBER FROM THE LAST CMD: 9
debugfs -R "ncheck 9" /dev/block/sda1

2.3 iodump
iodump可以显示fullpath。

2.4 Linux command
fdisk -l /dev/block/sda
fdisk -l mbr.img
gdisk -l gpt.img

2.5 EXT4 Encryption
CE: Credential Encrypted
DE: Device Encrypted
ENOKEY: Required key not available
FBE:File-Based Encryption,加密的仅仅是文件内容和文件名,其他的信息比如文件大小,权限等都没有加密,这些内容就是filesystem metadata
Metadata分区:加密文件大小,权限等除了文件内容和文件名之外的文件信息,/metadata/vold/metadata_encryption/key

github ext4-crypt
add_key() - e4crypt add_key
keyctl_search()
keyctl_unlink()

3 Abbreviations
DPT: Disk Partition Table
EBR: Extended Boot Record
MBR: Master Boot Record
PBR: Partition Boot Record

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

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

相关文章

【前端】JavaScript 方法速查大全-对象(二)

&#x1f525; 前言 在现代Web开发中&#xff0c;JavaScript已经成为不可或缺的编程语言。无论是前端开发还是后端服务&#xff0c;JavaScript都扮演着重要角色。为了帮助开发者更高效地使用JavaScript&#xff0c;本文将为您提供一个全面、系统的JavaScript方法参考&#xff…

复习数据库(外键约束)下篇

目录 前言 认识外键 外键的特点 外键的设计方式 多对多 组合主键 一对多/多对一 一对一 外键和外键约束的关系 外键的使用 添加约束 在建表时添加外键约束 如果已经创建表了,那我们可以修改表的方式给表添加外键约束: 应用实例 删除约束 删除/更新行为 含义 …

深入理解 Kafka:分布式消息队列的强大力量

一、引言 在现代分布式系统中&#xff0c;消息队列扮演着至关重要的角色&#xff0c;而 Kafka 作为其中的佼佼者&#xff0c;以其高吞吐量、可扩展性和持久性等特点被广泛应用。无论是处理海量的日志数据、实时的用户交互信息&#xff0c;还是复杂的微服务间通信&#xff0c;Ka…

Jekins篇(搭建/安装/配置)

目录 一、环境准备 1. Jenkins安装和持续集成环境配置 2. 服务器列表 3. 安装环境 Jekins 环境 4. JDK 环境 5. Maven环境 6. Git环境 方法一&#xff1a;yum安装 二、JenKins 安装 1. JenKins 访问 2. jenkins 初始化配置 三、Jenkins 配置 1. 镜像配置 四、Mave…

mmpose框架进行人体姿态识别模型HRNet训练

进行训练之前要先进行标注及数据增强&#xff0c;标注工具写在另一篇&#xff0c;首先讲数据增强。 数据增强 进行简单的色彩变换和位置变换&#xff0c;代码如下&#xff1a; from PIL import Image, ImageEnhance import numpy as np import os import glob import json im…

Dinky中配置Flink集群

需要启动yarn-session 进程&#xff0c;在集群服务器 cd /pwd//flink/bin yarn-session -d 启动成功后可以在yarn的资源管理队列进行查看 启动成功后会给出&#xff1a;JobManager Web Interface 在dinky中进行配置&#xff1a; 集群配置 Hadoop 配置&#xff1a; H…

Android13 系统/用户证书安装相关分析总结(三) 增加安装系统证书的接口遇到的问题和坑

一、前言 接上回说到&#xff0c;修改了程序&#xff0c;增加了接口&#xff0c;却不知道有没有什么问题&#xff0c;于是心怀忐忑等了几天。果然过了几天&#xff0c;应用那边的小伙伴报过来了问题。用户证书安装没有问题&#xff0c;系统证书(新增的接口)还是出现了问题。调…

hashcat爆破rar密码

背景&#xff1a; 在一道CTF题目的时候遇到了一个rar加密压缩包&#xff0c;记录一下爆破过程。 过程&#xff1a; 1、在前一个压缩包里面发现密码提示 2、file查看文件类型&#xff0c;发现是RAR v5&#xff0c;无法使用ARCHPR爆破&#xff0c;排除&#xff1b; 3、使用Pa…

构建多维分类知识库:Spring Boot实战

1 绪论 1.1 研究背景 在这个推荐个性化的时代&#xff0c;采用新技术开发一个多维分类的知识管理系统来分享和展示内容是一个永恒不变的需求。本次设计的多维分类的知识管理系统有管理员和用户两个角色。 管理员可以管理用户信息&#xff0c;知识分类&#xff0c;知识信息等&am…

深度学习实战100-大模型LLM之混合专家模型MoE的原理,以及代码实现过程

大家好,我是微学AI,今天给大家介绍一下深度学习实战100-大模型LLM之混合专家模型MoE的原理,以及代码实现过程。 混合专家模型(Mixture of Experts, MoE)是一种创新性的神经网络架构,巧妙地结合了 问题分类 和 领域专家 的概念。在这种架构中,输入数据首先经过一个门控网络…

AI + 绘画 | 100个可变现的渠道、方式

商机&#xff1a;AI绘画技术在美发⾏业的应⽤&#xff0c;旨在降低视频和图⽂制作成本&#xff0c;提升服务展⽰效果。通过AI技术&#xff0c;可以轻松展⽰发型设计前后对⽐&#xff0c;解决顾客与发型师之间的沟通难题。 变现&#xff1a; 1.⽣产图⽂内容或教程&#xff0c;…

[vulnhub]Empire: Breakout

https://www.vulnhub.com/entry/empire-breakout,751/ 端口扫描主机发现 探测存活主机&#xff0c;183是靶机 nmap -sP 192.168.75.0/24 Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-11-05 23:37 CST Nmap scan report for 192.168.75.1 Host is up (0.00045s latency…

精益生产管理培训对哪些岗位的人更有帮助?

精益生产管理培训作为一种提升企业运营效率和管理水平的有效手段&#xff0c;在现代企业中扮演着至关重要的角色。它不仅能够帮助企业减少浪费、优化流程&#xff0c;还能增强员工的责任感和团队协作能力。那么&#xff0c;精益生产管理培训对哪些岗位的人更有帮助呢&#xff1…

OpenCV的操作

1.图像的基本操作 1.1读取图像 image_handler cv2.imread(image_path, cv2.IMREAD_COLOR) 第一个参数图片的存储路径&#xff0c;第二个参数是图像的读取方式 第二个参数有三个选项: cv2.IMREAD_UNCHANGED&#xff1a;保持原格式不变&#xff0c;-1&#xff1b;cv2.IMREA…

数据结构之单链表

前言&#xff1a;上一篇文章我们了解到顺序表&#xff0c;这一次来看另一种线性表-------单链表。 1. 单链表的概念 单链表&#xff0c;想必很多人会感到陌生吧。那么&#xff0c;到底什么是单链表呢&#xff1f;先了解清楚单链表的概念及特性&#xff0c;才能够更好的实现单…

RabbitMQ死信队列

RabbitMQ死信队列 1、RabbitMQ死信队列2、代码示例2.1、队列过期2.1.1、配置类RabbitConfig&#xff08;关键代码&#xff09;2.1.2、业务类MessageService2.1.3、配置文件application.yml2.1.4、启动类2.1.5、配置文件2.1.6、测试 2.2、消息过期2.2.1、配置类RabbitConfig2.2.…

高亚科技签约酸动力,助力研发管理数字化升级

近日&#xff0c;中国企业管理软件资深服务商高亚科技与广东酸动力生物科技有限公司&#xff08;以下简称“酸动力”&#xff09;正式签署合作协议。借助高亚科技的8Manage PM项目管理软件&#xff0c;酸动力将进一步优化项目过程跟踪与节点监控&#xff0c;提升研发成果的高效…

Linux操作系统:学习进程_对进程的深入了解

目录 前言 开篇 一、进程概念 二、进程的描述与管理 1、如何描述与管理 2、Linux中的PCB-task_struct 3、对进程组织的理解 三、进程的属性 1、系统创建进程 2、查看进程 3、进程的标识符 4、退出进程 1>ctrlc 2>kill命令杀死进程 5、用户进程的创建方式…

大客户营销数字销售实战讲师培训讲师唐兴通专家人工智能大模型销售客户开发AI大数据挑战式销售顾问式销售专业销售向高层销售业绩增长创新

唐兴通 销售增长策略专家、数字销售实战导师 专注帮助企业构建面向AI数字时代新销售体系&#xff0c;擅长运用数字化工具重塑销售流程&#xff0c;提升销售业绩。作为《挑战式销售》译者&#xff0c;将全球顶尖销售理论大师马修狄克逊等理论导入中国销售业界。 核心专长&…

【Attention】ICAFusion:用于多光谱物体检测的迭代交叉注意引导的特征融合

ICAFusion: Iterative cross-attention guided feature fusion for multispectral object detection 摘要&#xff1a; 多光谱图像的有效特征融合在多光谱物体检测中起着至关重要的作用。以往的研究已经证明了使用卷积神经网络进行特征融合的有效性&#xff0c;但由于局部范围…