如何真正有效地压缩虚拟硬盘vhd,vhdx的大小

如何真正有效地压缩虚拟硬盘vhd,vhdx的大小,第1张

在用微软Hyper-V创建虚拟机的时候,一般都选择动态扩展磁中肆盘,具有占用物理硬搏培友盘空间小,创建速度快等优点。但也有个缺点,就是不能自动回收空间,比如,往虚拟机里复制一个5G的文件,虚拟机的物理VHD/VHDX文件就会增大5G,当把这个5G文件删除后,物理VHD/VHDX文件却不会减少,这样用一段时间后,物理VHD文件会膨胀到虚拟磁盘的最大值,对于存储空间来说,是很大的浪费,Hyper-V设置里面编辑磁盘里面有压基槐缩磁盘的功能,但是压缩后,VHD/VHDX大小不会发生改变,偶尔发现的一个方法,可以实现VHD/VHDX压缩,分享一下:

1、首先将虚拟机关机,我们查看一下VHD/VHDX的大小,是6.12GB;

2、将VHD/VHDX文件附加到本地磁盘管理中;

3、勾选”只读“;

4、打开Hyper-V管理器中的编辑磁盘,进行压缩;

5、选择”压缩“;

默认情况下,Docker Desktop for Window会创建如下两个发行版(distro):

docker-desktop:用于存放程序

docker-desktop-data:用于存放镜像

如果访问 %LOCALAPPDATA%/Docker/wsl 目录源型银,就可以看到两个文件夹,同时每个文件夹中都会有一个vhdx文件。

'data/ext4.vhdx'被docker-desktop-data 发行版使用

'distro/ext4.vhdx'被 docker-desktop 发行版使用

docker-desktop-data 是被用来存储docker images 以及相关的数据。因此,它的大小会随着使用逐步增长,因此导致系统盘空间不足。

ps: 可以试试命令

①查看所有容器:

cmd运行 docker ps -a

②删除已部署容器

cmd运行 docker rm 容器id 或者直接打开docker 在Containers/Apps里面删除所有容器

③再次检查容器是否删除干净

docker ps -a

wsl --shutdown

wsl --list --verbose

如下状态都为Stopped则都已关闭

①创建文件夹,目录根据自己实际情况指定。(本人使用D:\docker)。

②通过下面命令,将已有的数据,以tar格式备份已有数据到指雹宴定目录(D:\docker)

wsl --export docker-desktop-data D:\docker\docker-desktop-data.tar

wsl --export docker-desktop D:\docker\docker-desktop.tar

'docker-desktop-data'与'docker-desktop'就是第4步中,列举出来的用于存放镜像和程序的发行版本。

wsl --unregister docker-desktop-data

wsl --unregister docker-desktop

该命令执行完成之后,再次使用 wsl --list --verbose 命令查看,'docker-desktop-data'与'docker-desktop'就已经不在了。

wsl --import docker-desktop-data D:\docker\data D:\docker\docker-desktop-data.tar --version 2

wsl --import docker-desktop D:\docker\docker-desktop D:\docker\docker-desktop.tar --version 2

命令执行完成后使用 wsl --list --verbose 命令查看,皆已恢复。

'D:\docker\data'与'D:\docker\docker-desktop'即指定vhdx新的放置目录。

'D:\docker\docker-desktop-data.tar'与'D:\docker\docker-desktop.tar'指定第租派5步中备份的数据

Docker Desktop 运行成功之后,查看新目录中的vhdx的修改时间,如果修改时间是最新时间,就说明配置成功。

NTFS文件系统比FAT32复杂多了,小明我上课听得一头雾水。

接下来来详细介绍NTFS文件系统

NTFS文件系统原名为New Tecnology File System(这个称呼有点直接(・∀・)),是现在绝大多数电脑磁盘分区使用的文件系统

其具有以下特点:

安全性较高 ,NTFS文件系统有日志容错功能,所以安全性比FAT文件系统高。

–NTFS文件系统可以 给文件设置访问权限

–文件 压缩 和文件 加密 EFS加密 右键高级设置)

磁盘配额

–NTFS文件系统 支持大分区 (在MBR磁盘最大支持 2T ,在GPT磁盘支持的分区更大)

–NTFS文件系统 支持大文件 大于4G

–NTFS下可创建超过 2TB 的磁盘(注: 硬盘可创建超过其本身大小的虚拟磁盘 ,但是需要选择 动态扩展 而不是固定大小。其文件类型是 vhdx 。)

接下来演示以下NTFS文件的压缩功能(文件系统本身支持的,不借助压缩软件)

右键属性,点击常规中的高级,勾上 压缩内容以便节省磁盘空间

结构类型有两种

这些元文件名都是以 $ 开头的

• 以明文 “FILE” 开头

• 每个MFT项都占用 1024 字节,即 两个扇区

• NTFS文件系统中的所有文件,都有一个MFT项记录相应的数据

• 每个MFT项占用的两个扇区, 最后两个字节 是亩闹竖一个修正值,这个修正值和MFT项中的 更新序列号 相同,如果系统发现 不同 ,就会认为这个MFT项 错误 ,会把开头标志明文“FILE”改成 “BAAD”

每个MFT的属性都可以分成两部分: 属性头 属性体

MFT属性的分类

 • 常驻属性 :直接在 MFT项中 记录属性体,例如10 30

  •优点:直接在MFT项中记录属体,访问速度

  •缺点迅大:只能记录 少弯滚量 的数据

 • 非常驻属性 :在 MFT之外 的区域记录属性体,例如80

  •优点:用簇流记录文件存储的数据区域,可以记录很 的数据

  •缺点:访问速度较

一个属性分为 属性头 属性体 用同一种颜色的浅深区分

MFT中30属性,最小为\x68(104)字节,最大为\x268(616)字节,可容纳 255 Unicode 字符的文件名

80属性是存储文件数据内容

80属性有两种类型,一种是常驻80属性,一种是非常驻80属性

常驻属性头比较小,体比较大;

非常驻属性头比较大,体比较小

这在winhex很容易辨认

当文件大小 不超过1024字节(一个扇区) 是在一个簇里存,此时80属性为常驻属性;

当文件 大于1024字节 会变成簇流(非常驻)存储方式。

常驻80属性的属性体就是数据内容,可用winhex直接复制到新文件显示。

非常驻的属性体是簇流存储地址

LCN(logical cluster number):整个文件卷的相对位置,单位(簇)。

VCN(virtual cluster number):文件内部的相对位置,单位(簇)。

每个运行列表中第一个字节的低4位表示运行簇大小(filesize)的len,高4位表示起始簇(start)的len。如果一个运行列表后面的第一个字节是00,说明运行列表结束,后面的数值暂时不用管;如果不是00,则是下一个运行列表开始。

0x00~0x3F 是属性头;运行列表在橘黄色框中,0x40开始,可以得到运行列表 33 40 BC 00 00 00 0C。

分析如下:

首先0x33,低4位是3,表示紧随其后的3Byte 0xBC40作为 运行簇大小(簇个数) ,即文件所占总大小;高4位是3,表示簇大小之后的3个Byte 0x0C0000 是 起始簇 ,即文件起始,这里是说的是LCN。

划重点!!!

通过该处簇总个数与28-2F的属性体占用总空间大小,可推算出一个簇的大小

公式为

NTFS中一个簇包含的扇区=

(数据总大小(字节)/512)/簇总个数

分析如下:

第一个运行列表,首先是0x31,低4位是1,表示紧接着的1Byte(03)是运行簇大小;高4位是3,表示紧接着3Byte(65 9A 00)是起始簇,这里说的是LCN;

第二个运行列表,首先是0x11,低4位是1,表示紧接着的1Byte(01)是运行簇大小;高4位是1,表示紧接着3Byte(13)是起始簇,这里说的是VCN。

注意,只有第一个运行列表的起始簇说的是LCN,从第二个运行列表开始每个运行列表的起始簇都说的是VCN。想要得到LCN需要按下面的公式计算:

第n个运行列表的LCN = 第一个运行列表的起始簇(LCN) + 第二个运行列表的起始簇(VCN) +...+第n个运行列表的起始簇(VCN)

部分图片源自 https://www.jianshu.com/p/8471b7f4152a ,侵删


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/tougao/12127324.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-21
下一篇 2023-05-21

发表评论

登录后才能评论

评论列表(0条)

保存