前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >比较下载的多层目录文件的完整性

比较下载的多层目录文件的完整性

作者头像
生信喵实验柴
发布2023-09-04 08:03:56
2300
发布2023-09-04 08:03:56
举报
文章被收录于专栏:生信喵实验柴
背景

最近我需要从服务器上下载到本地windows系统中,本来想的是校验文件的md5值,就可以对比下载的文件完不完整了,其实在linux系统中,我们可以采用递归的命令来计算md5值,如下:

代码语言:javascript
复制
pushd 计算目录全路径
find . -type f -exec md5sum {} \; > md5sums.txt

这样生成的txt每一行展示了一个文件的md5值及对应的文件地址。

可是轮到windows这一头,我就头大了,尽管有一些比对工具或是下载工具可以比较下载文件的大小来确认是否需要重新下载(间接确认文件是否一样),但是这批下载的文件中还有一些比较大的压缩包,我还是想通过md5值来比较文件的完整性。折腾了一段时间,总算解决了。

解决方案

一、构建计划

既然问题出在系统不一样,那么联想起前段时间使用VirtualBox(下面简称vbox)安装AlmaLinux虚拟机的事,我们只需要解决让文件共享到虚拟机里就行了,说干就干!

二、vbox文件共享

vbox的共享文件夹和共享粘贴板等功能,均需要开启增强功能,而安装增强功能前,需要安装一系列依赖等,且需要记得重启虚拟器,下面给大家介绍具体步骤,我摸索过程中的bug,尽量告诉给大家。

2.1 安装增强功能

如果虚拟机是图形界面,可以在虚拟机开启状态下,点击上方控制栏中下拉框有一个安装增强功能,他会自动下载需要的iso文件。因为我们使用的是AlmaLinux,所以首先去官方下载文件:

代码语言:javascript
复制
http://download.virtualbox.org/virtualbox/7.0.10

其中7.0.10是我的vbox版本,可以自行修改为你的版本号,进入选择文件页面

如图选择 VBoxGuestAdditions_7.0.10.iso点击下载,记住下载的目录,下面要用。

2.2 加载虚拟磁盘

这一步是让虚拟机系统加载我们下载的iso文件。

按上图步骤选中该文件,第一次加载点击选择虚拟盘,选到刚下载的iso文件。

2.3 安装增强功能

打开虚拟机,挂载iso,一般是/dev/cdrom

代码语言:javascript
复制
mount /dev/cdrom /mnt/cdrom

进入挂载目录,我们可以找到安装的脚本VBoxLinuxAdditions.run,但先不执行。

代码语言:javascript
复制
cd /mnt/cdrom

接着我们安装需要使用到的依赖文件。

代码语言:javascript
复制
dnf install kernel-headers
dnf install kernel-devel
dnf install gcc* 
dnf install make
dnf install tar
dnf install bzip2
dnf install xorg-x11-drivers xorg-x11-utils

安装好依赖后,执行安装脚本

代码语言:javascript
复制
./VBoxLinuxAdditions.run
2.3.1 kernel报错

这个时候,我遇到了报错。

代码语言:javascript
复制
Kernel headers not found for target kernel

实际情况是我已经安装了kernel及其依赖。比较安装提示,发现是版本不对。

参考解决方案,我搜了网上的一大堆,重新安装了对应的版本,再执行安装命令,也是一样的报错。

代码语言:javascript
复制
参考地址:https://blog.csdn.net/qq_44497995/article/details/125189049

还有一个删除低版本内核的解决方案,我还没有尝试,网址如下:

代码语言:javascript
复制
https://blog.csdn.net/MR_Zhan_C/article/details/113247332

我的解决方案:

其实在安装脚本的报错中,有提示如果要增加其他版本的kernel模块支持,需要执行的命令

代码语言:javascript
复制
./VBoxLinuxAdditions.run #执行报错后
/sbin/rcvboxadd quicksetup all

在不改变之前安装依赖的命令时,我记得没错的话,我系统报错找不到的kernel是284版本,而我安装的是285版本,我的内核版本uname -r也是284版本。

不过没有关系,在运行/sbin/rcvboxadd quicksetup all命令后,提示新支持的285版本的字样。

此时增强功能已经安装完成了,不需要再执行安装脚本。

2.4 重启虚拟机

关闭后设置共享的文件目录

如上图,注意选中共享的目录,设置共享的文件名称data_file,后续要用,注意不要点击自动挂载,我们采用自己挂载的方式(自动大家可以尝试,好像是自己挂载到/media目录下)

设置好了,打开虚拟机。

挂载目录

代码语言:javascript
复制
cd /mnt   # mnt为你需要共享的文件夹路径
mkdir share   # 新建共享文件夹
mount -t vboxsf data_file /mnt/share   # 挂载共享文件夹,data_file对应vbox设置中的共享文件夹名称,此处错误则无法挂载,名称下均不加“/”

挂载完毕后,进入/mnt/share后即对应windows中的目录,可以愉快的进行md5递归校验的操作了。

代码语言:javascript
复制
pushd 计算目录全路径
find . -type f -exec md5sum {} \; > md5sums.txt

三、md5文件比对

原计划是拿到递归校验的md5文件,再对此做md5值计算,比较md5值即可,但是不凑巧的是同样的文件内容,如果行顺序不对,最后算出来的md5值也是不对的。

举例如下:

代码语言:javascript
复制
cat 1.txt 
    1
    2
    3
    4
    5
cat 2.txt 
    3
    2
    1
    4
    5
md5sum 1.txt 2.txt
    a7b1ac3a2b072f71a8e0d463bf4eb822  1.txt
    d3d0fa09972d97430e8d7449051084b6  2.txt

解决方案:

代码语言:javascript
复制
grep -wvf 2.txt 1.txt   #对比两个md5文件不同的行 1中有2没有的行
grep -wvf 1.txt 2.txt   #对比两个md5文件不同的行 2中有1没有的行

若是上面举的例子,则不返回任何值,代表1文件的内容完全被2包含。

顺序颠倒,则代表2文件的内容完全被1包含。即完全一致。

那么至此,我们就可以比较下载源Linux系统中的md5sums.txt文件和虚拟机中计算的md5sums.txt文件的内容是否一致了,且可以根据不一致的行,补充下载 下载不完整或出错的文件。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2023-08-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 生信喵实验柴 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 解决方案
    • 一、构建计划
      • 二、vbox文件共享
        • 2.1 安装增强功能
        • 2.2 加载虚拟磁盘
        • 2.3 安装增强功能
        • 2.4 重启虚拟机
      • 三、md5文件比对
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档