linux环境安装使用FastDFS,FastDHT详解

news2024/11/30 20:32:48

01-简介

GitHub:happyfish100 (YuQing) · GitHub
FastDFS高性能的分布式文件系统,主要功能包含文件的存储、同步、访问(上传和下载),特别适用于以文件为主体的网络站点(图片分享和视频分享)。
FastDFS包含两个角色:
  • Tracker(追踪器 调度服务器):调度和文件访问的负载均衡
  • Storage(存储器 存储服务器):文件的管理(存储、同步、访问接口)和文件的元数据支持水平扩展,不会对在线服务造成任何影响
存储服务器通过/组织管理,不同的卷管理不同的文件,一个卷管理一台或者多台存储服务器,并且这些存储服务器之间互相备份。
存储容量=所有卷容量之和
文件在集群中标示=卷名+文件名
结构图:

 

 


02-环境搭建(单机)

在安装fastdfs之前,准备环境
yum -y install zlib zlib-devel pcre pcre-devel gcc gcc-c++ openssl openssl-devel libevent libevent-devel perl unzip net-tools wget
开始安装
#1.下载安装包,可根据自己所需要的的版本下载(官网可供选择),先安装libfastcommon再安装fastdfs
  #libfastcommon下载地址
https://github.com/happyfish100/libfastcommon
 #fastdfs下载地址
https://github.com/happyfish100/fastdfs
#2.上传并解压libfastcommon压缩包
unzip libfastcommon.zip
#3.进入解压好的文件目录,查看是否有make.sh文件,然后并执行该文件进行安装
cd libfastcommon/
./make.sh && ./make.sh install
#4.上传并解压fastdfs压缩包
unzip fastdfs.zip
#5.进入解压好的文件目录,查看是否有make.sh文件,然后并执行该文件进行安装
cd fastdfs/
./make.sh && ./make.sh install
#6.安装完成之后,查看/usr/bin目录下是否有fdfs开头的文件,这些执行文件在这个目录下的好处就是不用配置环境变量
find /usr/bin/ -name 'fdfs*'
例如:
    /usr/bin/fdfs_upload_appender
    /usr/bin/fdfs_append_file
    /usr/bin/fdfs_appender_test1
    /usr/bin/fdfs_download_file
    /usr/bin/fdfs_test
    /usr/bin/fdfs_delete_file
    /usr/bin/fdfs_test1
    /usr/bin/fdfs_crc32
    /usr/bin/fdfs_upload_file
    /usr/bin/fdfs_storaged
    /usr/bin/fdfs_trackerd
    /usr/bin/fdfs_appender_test
    /usr/bin/fdfs_file_info
    /usr/bin/fdfs_monitor
#7.修改配置文件,进入/etc/fdfs目录下,然后将以下三个文件进行重命名,如果名字已经.conf结尾,就不用修改名字,可以跳过这一步
cd /etc/fdfs
client.conf.sample  storage.conf.sample  tracker.conf.sample
mv client.conf.sample client.conf
mv storage.conf.sample storage.conf
mv tracker.conf.sample  tracker.conf
#8.修改配置文件
    #修改tracker.conf配置文件
base_path=/data/tracker    #数据存储位置,填写自己的路径(可以自己创建一个新目录)
  #修改storage.conf配置文件
base_path=/data/storage    #数据存储位置,填写自己的路径(可以自己创建一个新目录)
store_path0=/data/storage    #根据数据存储位置一样就行
tracker_server=192.168.209.121:22122    #指定tracker服务地址和端口
#9.启动服务,以下启动命令可以在任意目录执行
fdfs_trackerd /etc/fdfs/tracker.conf start    #启动tracker
fdfs_storaged /etc/fdfs/storage.conf start    #启动storage
#10.测试
    #修改client.conf配置文件
base_path=/storage   #存储位置,存放位置自己可以创建一个新目录
tracker_server=192.168.0.197:22122    #指定tracker服务地址和端口
    #上传文件
fdfs_upload_file /etc/fdfs/client.conf /root/1.png
    #下载文件
fdfs_download_file /etc/fdfs/client.conf  上传的文件名   下载目录

 

 


03-java集成Fastdfs

    1.添加依赖,我们可以在maven厂库去寻找,也可以在Fastdfs的作者github找到 fastdfs-client-java项目,下载到自己本地然后打包
<dependency>
    <groupId>com.github.tobato</groupId>
    <artifactId>fastdfs-client</artifactId>
    <version>1.27.2</version>
</dependency>
注意:如果在maven远程厂库下载的依赖报版本冲突错误,需要自己手动下载项目打包
    2.配置
fdfs.so-timeout=1501
fdfs.connect-timeout=601
fdfs.tracker-list=101.42.151.107:22122
    3.测试
@SpringBootTest(classes = FastdfsApplication.class)
@RunWith(SpringRunner.class)
public class Test {
    @Autowired
    private FastFileStorageClient fastFileStorageClient;
    /**
     *@Description: 下载
     *@Date: 2022/8/23 20:27
     **/
    @org.junit.Test
    public void test1() throws IOException {
        byte[] group1s = fastFileStorageClient.downloadFile("group1", "M00/00/00/CgAQBGMDiZWAZSSPAAAKYireMTk031.gif", new DownloadByteArray());
        FileOutputStream fileOutputStream = new FileOutputStream("C:\\Users\\86041\\Desktop\\f\\fastdfs\\fastdfs_springboot\\src\\main\\resources\\1.gif");
        fileOutputStream.write(group1s);
    }
    /**
     *@Description: 上传
     *@Date: 2022/8/23 20:29
     **/
    @org.junit.Test
    public void test2() throws FileNotFoundException {
        File file = new File("F:\\picture\\donde\\geju.jpg");
        FileInputStream fileInputStream = new FileInputStream(file);
        StorePath jpg = fastFileStorageClient.uploadFile(fileInputStream, file.length(), "jpg", null);
        System.out.println(jpg.getGroup());//组名
        System.out.println(jpg.getPath());//存放位置
    }
}

04-FastDFs集成Nginx

#1.上传nginx和fastdfs-nginx-modulefastdfs-nginx-module下载地址
https://github.com/happyfish100/fastdfs-nginx-module
#2.解压并修改fastdfs-nginx-module的配置文件
unzip fastdfs-nginx-module.zip
vi /usr/fastdfs-nginx-module/src/config
    #修改如下
if test -n "${ngx_module_link}"; then
    ngx_module_type=HTTP
    ngx_module_name=$ngx_addon_name
    ngx_module_incs="/usr/include/fastdfs /usr/include/fastcommon/"
    ngx_module_libs="-lfastcommon -lfdfsclient"
    ngx_module_srcs="$ngx_addon_dir/ngx_http_fastdfs_module.c"
    ngx_module_deps=
    CFLAGS="$CFLAGS -D_FILE_OFFSET_BITS=64 -DFDFS_OUTPUT_CHUNK_SIZE='256*1024' -DFDFS_MOD_CONF_FILENAME='\"/etc/fdfs/mod_fastdfs.conf\"'"
    . auto/module
else
    HTTP_MODULES="$HTTP_MODULES ngx_http_fastdfs_module"
    NGX_ADDON_SRCS="$NGX_ADDON_SRCS $ngx_addon_dir/ngx_http_fastdfs_module.c"
    CORE_INCS="$CORE_INCS /usr/include/fastdfs /usr/include/fastcommon/"
    CORE_LIBS="$CORE_LIBS -lfastcommon -lfdfsclient"
    CFLAGS="$CFLAGS -D_FILE_OFFSET_BITS=64 -DFDFS_OUTPUT_CHUNK_SIZE='256*1024' -DFDFS_MOD_CONF_FILENAME='\"/etc/fdfs/mod_fastdfs.conf\"'"
#3.进入nginx解压好的目录,并执行configure连同fastdfs-nginx-module
cd /usr/nginx-1.11.1/
./configure --add-module=/usr/fastdfs-nginx-module/src/ --prefix=/usr/nginx    
#指定自己fastdfs-nginx-module路径,同时指定你要安装nginx的路径
#4.执行nginx安装命令,(在解压好的nginx目录里执行)(这里很容易出错,如果出错就更换fastdfs-nginx-module)
make && make install
#5.拷贝fastdfs-nginx-module的mod_fastdfs.conf配置文件到/etc/fdfs目录下
cp /usr/local/src/fastdfs-nginx-module/src/mod_fastdfs.conf /etc/fdfs
#6.拷贝fastdfs的conf目录下的http.conf和mime.types文件到/etc/fdfs目录下
cp fastdfs-5.11/conf/http.conf /etc/fdfs
cp fastdfs-5.11/conf/mime.types /etc/fdfs
#7.修改nginx的nginx.conf配置文件
vi /usr/local/nginx/conf/nginx.conf
    #修改nginx的监听端口,该端口跟storage.conf中的http.server_port保持一样
    #修改location,注释掉之前的location,添加如下location
server {
    listen 8888;
    server_name localhost;
    location ~/group[0-9]/ {
        ngx_fastdfs_module;
    }
}
#8.修改/etc/fdfs/mod_fastdfs.conf配置文件
vi /etc/fdfs/mod_fastdfs.conf
    #修改如下内容
tracker_server=192.168.128.141:22122                  #指定自己的tracker服务地址和端口
url_have_group_name = true                                   #是否允许用组名访问,设置为true
group_name=group1                                               #组名,默认为group1,不用修改
store_path0=/data/fastdfs/storage/store             #指定自己的文件目录
#9.启动nginx服务
./nginx -c /usr/local/nginx/conf/nginx.conf
#10.启动FastDFS服务
fdfs_trackerd /etc/fdfs/tracker.conf start
fdfs_storaged /etc/fdfs/storage.conf start
注意:fastdfs_v5.0与 fastdfs-nginx-module_v1.16安装正常,与1.20版本安装会报错:错误:在非结构或联合中请求成员‘path’

 

05-集成 FastDHT(文件去重)


排重原理:
FastDFS本身支持文件的排重处理机制(fdfd_crc32 效率高于MD5),但需要FastDHT作为文件hash的索引存储。FastDHT是同一个作者的开源key-value数库。
FastDFSstorage server每次上传均计算文件的hash值,然后从FastDHT服务器上进行查找比对,如果没有返回,则写入hash,并将文件保存如果有返回,则建立一个新的文件链接(软连接 ln -s),不保存文件。
环境搭建
#1.安装BerkeleyDB,并上传到服务器然后解压,下载地址: http://download.oracle.com/berkeley-db/db-6.0.30.tar.gz
tar -zxvf db-6.0.30.tar.gz
#2.进入到解压好的目录db-4.7.25/build_unix/,并执行configure命令
cd  db-6.0.30/build_unix/
../dist/configure --prefix=/usr/db-6.0.30
#3.执行make
make && make install
#4.安装FastDHT,并上传到服务器然后解压,下载地址:GitHub - happyfish100/fastdht: FastDHT is a high performance distributed hash table (DHT) which based key value pairs. It can store mass key value pairs such as filename mapping, session data and user related data.
unzip fastdht-master.zip
#5.进入解压好的目录,然后修改make.sh,蓝色为增加内容,BerkeleyDB存放位置根据自己安装的目录填写
cd fastdht/
vi make.sh
CFLAGS='$CFLAGS -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE -I/usr/db-6.0.30/include/ -L/usr/db-6.0.30/lib/'
if [ "$DEBUG_FLAG" = "1" ]; then
  CFLAGS="$CFLAGS -g -O -DDEBUG_FLAG"
else
  CFLAGS="$CFLAGS -O3"
#5.执行make,安装完成之后会在/usr/local/bin/目录下生成fdht执行文件
./make.sh && ./make.sh install
#6.安装完成后在/etc目录下产生fdht文件夹,并进行修改
ls /etc/fdht/
fdht_client.conf  fdhtd.conf  fdht_servers.conf
#先创建一个目录用来存储资源
mkdir fastdht
#修改fdht_client.conf
base_path=/data/fastdht
keep_alive=1
#include /etc/fdht/fdht_servers.conf        (此处是需要加上#,##关闭,#打开)
#修改fdht_servers.conf
group_count = 1                                     #fastdht个数
group0 = 192.168.145.150:11411         #fastdht服务器地址和端口
#修改fdhtd.conf
port=11411
bash_path=/data/fastdht
#include /etc/fdht/fdht_servers.conf
#7.修改/etc/fdfs/storage.conf
check_file_duplicate=1
key_namespace=FastDFS
keep_alive=1
#include /etc/fdht/fdht_servers.conf
#8.拷贝libdb.so到/usr/lib目录
cp /usr/db-6.0.30/lib/libdb-6.0.so  /usr/lib/
cp /usr/db-6.0.30/lib/libdb-6.0.so  /usr/lib64/
#9.启动,分别启动fdhtd和fastdfs
/usr/local/bin/fdhtd /etc/fdht/fdhtd.conf start
/usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf start
/usr/bin/fdfs_storaged /etc/fdfs/storage.conf start
#10.测试
上传相同文件,发现原始文件只会保留一份,相同文件上传都会变为快捷方式

06-fastdfs分布式文件系统集群环境搭建

搭建步骤:
    (1)准备四台机器(仅测试)
                tracker:2台(192.168.80.145,192.168.80.146)
                storage:3台,分两组(192.168.80.147,192.168.80.148,192.168.80.149)
        注意:五台机器的服务均已安装了fastdfs,nginx,fastdht,还有就是注意关闭所有机器的防火墙
    (2)配置tracker( 两台tracker
#1.进入/etc/fdfs/,修改tracker.conf
base_path=/home/fastdfs/tracker (确保路径存在,不存在先创建)
#负载均衡策略:0: 轮训,每个组上传一次,1: 指定组上传,2: 负载均衡,选择上传文件的最大空闲空间组
#当store_lookup=1时,store_group必须指定组名
store_lookup=2
#2.进入nginx,修改nginx.conf
    upstream fastdfs_group1_server {
        server 192.168.80.147:8888;
        server 192.168.80.148:8888;
    }
    upstream fastdfs_group2_server {
        server 192.168.80.149:8888;
    }
    server{
        listen 8888;
        server_name localhost;
        location ~ /group1/M0[0-9] {
            proxy_pass http://fastdfs_group1_server;
        }
        location ~ /group2/M0[0-9] {
            proxy_pass http://fastdfs_group2_server;
        }
    }
    (3)配置storage(三台storage)
#1.进入/etc/fdfs/,修改storage.conf
a)、group1(192.168.80.147,192.168.80.148):
  配置:
  tracker_server=192.168.80.145:22122       (配置tracker)
  tracker_server=192.168.80.146:22122
  group_name=group1
  base_path=/data/fastdfs/storage           (确保路径存在,不存在先创建)
  store_path0=/data/fastdfs/storage    (确保路径存在,不存在先创建)
b)、group2(192.168.80.149):
  配置:
  tracker_server=192.168.80.145:22122       (配置tracker)
  tracker_server=192.168.80.146:22122
  group_name=group2
  base_path=/data/fastdfs/storage          (确保路径存在,不存在先创建)
  store_path0=/data/fastdfs/storage   (确保路径存在,不存在先创建)
  注释:除了组名称不一样,其余都一样
#2.进入/etc/fdfs/,修改mod_fastdfs.conf
配置文件:
     base_path=/home/fastdfs/mod_fastdfs     #保存日志目录
     tracker_server=192.168.80.145:22122     #tracker服务器的IP地址以及端口号
     tracker_server=192.168.80.146:22122
     group_name=group1                       #当前服务器的group名(147 148 group1,149 group2)
     url_have_group_name=true                #文件url中是否有group名
     store_path0=/home/fastdfs/storage  #存储路径
     group_count = 2                         #设置组的个数
#3.在末尾增加2个组的具体信息:(有几组就填写几组)
    [group1]
     group_name=group1
     storage_server_port=23000
     store_path_count=1
     store_path0=/home/fastdfs/storage
    [group2]
     group_name=group2
     storage_server_port=23000
     store_path_count=1
     store_path0=/home/fastdfs/storage
#4.进入nginx,修改nginx.conf
server{
     listen 8888; #storage 配置中, 有http.server_post=8888的配置信息,必须一致
     server_name localhost;
     location ~ /group[1-9]/M0[0-9] {
         ngx_fastdfs_module;
     }
}
    
    (4)查看集群信息
#在三台storage服务器中 找一台服务器更改client.conf
#1.进入/etc/fdfs/,修改client.conf
base_path = /data/fastdfs/client
tracker_server = 192.168.80.145:22122    (有几个tracker机器配置几个tracker)
tracker_server = 192.168.80.146:22122
#2.执行fdfs_monitor命令,就可以得到集群信息
fdfs_monitor /etc/fdfs/client.conf
    (5)测试
#在其中一台机器中,更改client.conf,然后执行上传

 

#修改client.conf

持续更新!

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

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

相关文章

2023年Java面试正确姿势(1000+面试题附答案解析)

前言 2023 跳槽不迷茫&#xff0c;大家可以先收藏再看&#xff0c;后续跳槽都能用上的&#xff01; 一键获取最新java文档。 Java程序员绝大部分工作的时间都是增删改查&#xff0c;很多人觉得这项工作没什么技术含量&#xff0c;任何一件事情都要站在不同的角度去考虑&#xf…

shell的数组

数组定义方法 方法一&#xff1a;数组名&#xff08; value0 value1 value2 ...&#xff09; 方法二&#xff1a;数组名&#xff08;[0]value [1]value [2]value...&#xff09; 方法三&#xff1a;列表名"value0 value1 value2 ..." 数组名&#xff08;$列表名&…

【WLAN从入门到精通-基础篇】

WLAN定义和基本架构 本文参考https://forum.huawei.com/enterprise/zh/thread/580888898454831104 1. WLAN定义 WLAN的全称是Wireless Local Area Network&#xff0c;中文含义是无线局域网&#xff0c;WLAN的定义有广义和狭义两种&#xff1a;广义上讲WLAN是以各种无线电波…

使用Kotlin函数式编程技术构建强大的 Android 应用程序

使用Kotlin函数式编程技术构建强大的 Android 应用程序 Kotlin 是一种现代的多用途编程语言&#xff0c;在 Android 应用程序开发人员中迅速流行起来。Kotlin 有别于其他编程语言的关键特性之一是它对函数式编程的强大支持。Kotlin 函数式编程允许开发人员编写更清晰、更简洁、…

本地生活服务:老将、新秀同台竞技

配图来自Canva可画 本地生活服务领域又热闹起来了。 事实上&#xff0c;本地生活服务一直为各路玩家所看好。最近几年&#xff0c;互联网大厂频频布局本地生活服务领域&#xff0c;其中抖音、快手等短视频平台更是持续加大在本地生活服务领域的布局力度。 前不久&#xff0c…

Grafana系列-统一展示-10-Explore Jaeger

系列文章 Grafana 系列文章 Explore Jaeger 你可以通过Explore查询和显示 Jaeger 的 trace。有 3 种方法: Query by searchQuery by trace IDUpload a JSON trace file Query by search 要使用该方法: 从 Query 类型选择器中选择 Search。填写搜索表格&#xff1a;(和 J…

2023第十三届中国数字营销与电商创新峰会 嘉宾揭晓

2023第十三届中国数字营销与电商创新峰会将于7月6日-7日在上海召开。 本次峰会将通过七大热点主题帮助品牌主突破模式能力&#xff0c;回归初心、精耕细作&#xff0c;实现可持续增长&#xff1b;提升产品能力&#xff0c;实现可持续长期增长&#xff1b;优化营销能力&#xf…

HTTP第11讲——HTTP的特点

灵活可扩展 首先&#xff0c; HTTP 协议是一个“灵活可扩展”的传输协议。 HTTP 协议最初诞生的时候就比较简单&#xff0c;本着开放的精神只规定了报文的基本格式&#xff0c;比如用空格分隔单词&#xff0c;用换行分隔字段&#xff0c;“headerbody”等&#xff0c;报文里的…

分析车载蓝牙通话只有前喇叭声音,后面喇叭无声背后原因

车载蓝牙通话只有前喇叭声音&#xff0c;后面喇叭无声背后原因 大家有没有注意到车载蓝牙连接后通话的时候只有前喇叭的有声音&#xff0c;后面喇叭没声音呢&#xff1f;特别是后装的车载多媒体上基本都是这样&#xff0c;细思下为什么这样的原因&#xff0c; 采访后装车载技术…

【软考备战·五月模考】希赛网五月模考软件设计师上午题

文章目录 一、成绩报告二、错题总结第一题第二题第三题第四题第五题第六题第七题第八题第九题第十题第十一题第十二题 三、知识查缺 题目及解析来源&#xff1a;2023上半年软考-模考大赛 一、成绩报告 二、错题总结 第一题 解析&#xff1a; 瀑布模型 中各个活动按 线性顺序 连…

【Spring全家桶系列】AspectJ表达式的书写与SpringAOP下的五种通知类型

⭐️前面的话⭐️ 本文已经收录到《Spring框架全家桶系列》专栏&#xff0c;本文将介绍AspectJ表达式的书写与SpringAOP下的五种通知类型。 &#x1f4d2;博客主页&#xff1a;未见花闻的博客主页 &#x1f389;欢迎关注&#x1f50e;点赞&#x1f44d;收藏⭐️留言&#x1f4…

基于ArcGIS实现陕西省1:250000比例尺地形图分幅和编号

1地形图的分幅与编号原理 我国1:1000000地形图的分幅采用国际1:1000000地图分幅标准&#xff0c;而其他比例尺地形图分幅以1:1000000比例尺地形图为基准进行分幅。每幅1:1000000地形图范围是经差6、纬差4&#xff1b;纬度60~ 76之间经差12、纬差4&#xff1b;纬度76~ 88之间经…

数据结构之数组对栈的实现

目录 1.什么是栈 2.栈的基本操作 3.栈的实现 1.结构体与函数接口 2.初始化栈 3.销毁栈 4.入栈 5.出栈 6.返回栈元素数量大小 7.判空 8.打印栈 1.什么是栈 栈是一种特殊的线性表&#xff0c;其中只允许固定的一端进行插入与删除&#xff0c;进行输出插入删除的那一端我…

振幅调制器【Multisim】【高频电子线路】

目录 一、实验目的与要求 二、实验仪器 三、实验内容与测试结果 1、观测集电极调幅器输出信号波形&#xff0c;测量调幅度 2、观察集电极调幅器输出信号频谱&#xff08;Fourier analysis&#xff09; 3、改变V1幅度为0.8Vpk&#xff0c;观测输出波形&#xff0c;说明原…

MySQL函数详细

♥️作者&#xff1a;小刘在C站 ♥️个人主页&#xff1a;小刘主页 ♥️每天分享云计算网络运维课堂笔记&#xff0c;努力不一定有收获&#xff0c;但一定会有收获加油&#xff01;一起努力&#xff0c;共赴美好人生&#xff01; ♥️树高千尺&#xff0c;落叶归根人生不易&…

设计模式之【享元模式】,共享单车火起来并不是没有原因的

文章目录 一、什么是享元模式1、享元模式的角色2、享元模式应用场景3、享元模式的内部状态和外部状态4、享元模式的优缺点5、享元模式跟单例的区别6、享元模式跟缓存的区别7、享元模式注意事项及细节 二、实例1、享元模式一般写法2、俄罗斯方块案例3、购票业务案例4、数据库连接…

win2012/win2016/win2019 IIS部署SSL证书访问https(支持多站点)

请根据操作系统、站点部署数量选择以下相应参考文档&#xff0c;文档仅供参考。 A、windows2008iis7环境SSL部署https单/多站点 B、linux系统SSL部署https单/多站点 C、windows2003系统SSL单站点部署https 部署https(ssl)后设置301跳转将http跳转到https 亚数机房香港IP部…

(2022 EMNLP)(SEMGraph)将情感知识和眼动结合到一个图架构中

论文题目&#xff08;Title&#xff09;&#xff1a;SEMGraph: Incorporating Sentiment Knowledge and Eye Movement into Graph Model for Sentiment Analysis 研究问题&#xff08;Question&#xff09;&#xff1a;基于眼动的情感分析&#xff0c;旨在绘制基于眼动的情感关…

【Java多线程编程】解决线程的不安全问题之synchronized关键字

前言&#xff1a; 当我们进行多线程编程时候&#xff0c;多个线程抢占系统资源就会造成程序运行后达不到想要的需求。我们可以通过 synchronized 关键字对某个代码块或操作进行加锁。这样就能达到多个线程安全的执行&#xff0c;因此我把如何使用 synchronized 进行加锁的操作…

PVE安装高大全固件

PVE安装高大全的时候&#xff0c;把IMG挂在光驱上&#xff0c;发现无法运行。 后来明白了&#xff0c;openwrt的镜像直接就是个系统磁盘镜像&#xff0c; 没有引导启动项和安装程序&#xff0c;度娘和CSDN后才知道。 ———— 创建个虚拟机&#xff0c;按照引导创建虚拟机即…