Tensorflow-gpu保姆级安装教程(Win11, Anaconda3,Python3.9)

news2024/11/15 11:02:02

Tensorflow-gpu 保姆级安装教程(Win11, Anaconda3,Python3.9)

    • 前言
    • Tensorflow-gpu版本安装的准备工作
    • (一)、查看电脑的显卡:
    • (二) 、Anaconda的安装
    • (三)、cuda下载和安装
    • (四)、cudnn下载安装
    • (五)、配置环境变量
    • (六)、创建 tensorflow 环境
    • (七)、测试 Tensorflow-gpu 是否安装成功
    • 卸载重装

前言

CPU版本和GPU版本的区别主要在于运行速度GPU版本运行速度更快,所以如果电脑显卡支持cuda,推荐安装gpu版本的。

  • CPU版本,无需额外准备,CPU版本一般电脑都可以安装,无需额外准备显卡的内容,(如果安装CPU版本请参考网上其他教程!

  • GPU版本,需要提前下载 cudacuDNN。(本文为GPU版本安装教程。

Tensorflow-gpu版本安装的准备工作

重要的事说三遍:

安装前 一定 要查看自己电脑的环境配置,然后查询Tensorflow-gpuPythoncuda cuDNN 版本关系,要 一 一对应

安装前 一定 要查看自己电脑的环境配置,然后查询Tensorflow-gpuPythoncuda cuDNN 版本关系,要 一 一对应

安装前 一定 要查看自己电脑的环境配置,然后查询Tensorflow-gpuPythoncuda cuDNN 版本关系,要 一 一对应

Tensorflow-gpu 与 Python、 cuda、cuDNN 版本关系查询

在这里插入图片描述

我的安装环境为:

操作系统显卡Python
win11NVIDIA GeForce RTX20503.9.13

我的tensorflow-gpu 安装版本为:

tensorflow-gpucudacuDNN
tensorflow-gpu 2.7.0cuda 11.5.2cuDNN 8.3.2

注: 我这个对应关系是在网上查询别人安装成功的案例,不要自己随意组合,不然很容易安装失败,或者就按官网查询的组合安装,安装过程是一样的!

(一)、查看电脑的显卡:

1)、右键此电脑→右键选管理设备管理器显示适配器
主要看独显:GeForce RTX 2050

在这里插入图片描述

可以看到点击出现了NVIDIA GeForce ...,即你的电脑显卡型号。

  • 如果有出现,那就表示可以使用Tensorflow-gpu版本,如果没有的就只能老老实实安装CPU版咯。
  • 然后可以去NIVIDIA官网查询一下自己电脑显卡的算力:https://developer.nvidia.com/cuda-gpus,建议算力>=3.5安装。

在这里插入图片描述

我的型号没有查到,NVIDIA近几年显卡的算力一般是够的。

2)、右键显卡属性驱动程序,可以查看显卡的驱动程序:

在这里插入图片描述

3)、查看GPU驱动版本,也就是我们“CUDA Version”,Windows 11 版本中一般是12.0版本,键盘上同时按win +r,输入cmd,打开命令窗口,在命令窗口输入:

nvidia-smi

在这里插入图片描述

(二) 、Anaconda的安装

安装tensorflow提前安装好Anaconda。这里我也不重点介绍了,我之前也重点详细地写过相关文章:
Anaconda安装-超详细版(2023)

Anaconda安装成功后,进入下面tensorflow的安装!

后面tensorflow的安装可成三步:

  1. cuda的安装
  2. cuDNN的神经网络加速库安装
  3. 配置环境变量

(三)、cuda下载和安装

下载cudacuDNN。在官网上下载对应的cudacuDNN,版本可以低于上面查到的CUDA版本但不能高于电脑支持的版本。

  • cuda下载地址:CUDA Toolkit Archive | NVIDIA Developer;
  • cudnn下载地址:cuDNN Archive | NVIDIA Developer。

1)、下载:

我下载的是CUDA Toolkit 11.5.2, 点击前面的 CUDA Toolkit 11.5.2
在这里插入图片描述

选择相应的系统、版本等选项,点击Download下载:
在这里插入图片描述
2)、安装

a、 双击安装包,此时会出现一个提示框,让你选择临时解压位置(该位置的内容在你安装完cuda之后会自动删除),这里默认即可,点击ok。

在这里插入图片描述

b、点击同意并继续:

在这里插入图片描述

c、完成上一步后,选择自定义,然后点下一步:

在这里插入图片描述

d、完成上一步,这里CUDA一定要勾选上,下面的可选可不选,对后续没有影响。

  • 在组件CUDA一栏中,取消勾选Visual Studio Integration(因为我们并没有使用Visual Stduio环境,即使勾选上了也会安装失败)

在这里插入图片描述

  • 在Driver components一栏比较Display Driver的新版本和当前版本的信息。
    • 若当前版本高于新版本,则取消勾选Display Driver;
    • 若当前版本低于新版本,则保留默认安装信息即可,否则电脑会死机或者卡顿,甚至可能蓝屏。!!!

在这里插入图片描述

e、这个安装位置可以自己改。要截图记录一下你装到哪里了,后面要用到!我选择了默认安装位置。

在这里插入图片描述

f、正在安装

在这里插入图片描述

g、安装成功!

在这里插入图片描述

点击关闭即可!

在这里插入图片描述

检查环境变量

完成安装后,检查一下环境变量是否存在,一般安装完成会自动配置好环境变量,若是没有,则需手动配置,具体过程如下。

  1. 打开 电脑属性,找到 高级系统设置,选择 环境变量 打开。

  2. 查看是否有以下系统变量,没有则需要自行添加,对应图片上的名称和值,配置你电脑CUDA安装所在的位置。

在这里插入图片描述

  1. 打开系统变量的Path,查看是否有一下两条内容,若没有则需自行添加,一定要配置对安装的位置。

在这里插入图片描述

配置好环境变量后,我们检查下CUDA是否安装成功。

  1. 打开cmd,输入以下命令查看CUDA是否安装成功(二选一)
    如果不能显示以下信息,则说明安装失败。
nvcc -V
nvcc --version

在这里插入图片描述

  • 还可以查看CUDA 设置的环境变量。
set cuda

在这里插入图片描述

  • 我们还可以搜索CUDA 的安装目录,找到“nvcc.exe”文件。

在这里插入图片描述

CUDA的安装就结束了,接下来下载解压cuDNN文件。

(四)、cudnn下载安装

CUDA并不是实现GPU的神经网络加速库,如果希望针对的是神经网络进行加速,我们还需要安装cuDNN神经网络加速库。

  • cuDNN并非是应用程序,而是几个文件包,下载后把它复制到CUDA 的目录下即可。
    下载地址:cuDNN Archive | NVIDIA Developer。

  • 第一次单击下载时,会让你先注册登录,然后再进行下载,注册过程认真填写内容就没问题,此处略过,接下来进入下载环节。

1)、下载:

下载对应版本的cuDNN。这里选择的是cuDNN v8.3.2 for CUDA 11.5

在这里插入图片描述

  1. 、下载解压好安装包后,我们解压可以看到有四个文件:
    在这里插入图片描述

3)、教程的这一步要格外注意

  • 要将cudnn文件中的对应文件夹下的所有文件复制 到对应的安装目录中,
  • 不是cudnn文件中的文件夹复制过去。eg:复制的不是cudnn中的bin文件夹,而是bin文件夹下的所有文件。(有重复的文件是正常的,覆盖掉就好!)

在这里插入图片描述

  1. 打开cudnn文件中的bin文件夹,将该文件夹中所有的 文件 复制粘贴CUDA\v11.5\bin文件夹中:

在这里插入图片描述

  1. 打开cudnn文件中的include文件夹,将该文件夹中所有的 文件 复制粘贴CUDA\v11.5\include文件夹中:

在这里插入图片描述

  1. 打开cudnn文件中的lib文件夹,将该文件夹中所有的 文件 复制粘贴CUDA\v11.5\lib\x64文件夹中:

在这里插入图片描述

  1. 打开cudnn文件中的剩下的文件复制粘贴CUDA\v11.5文件夹中:

在这里插入图片描述
cuDNN其实就是CUDA的一个补丁而已,专为深度学习运算进行优化的,然后我们再添加环境变量!继续往下走。

(五)、配置环境变量

  1. 、打开系统变量的Path,在系统变量的path路径下添加以下路径:(具体要根据自己的安装路径下做调整)
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.5\bin
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.5\libnvvp
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.5
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.5\lib\x64

添加好后是这样的:

在这里插入图片描述

2)、配置好环境后,我们需要验证环境变量是否配置成功:

打开cmd,进入自己CUDA的安装下路径...\CUDA\v11.5\extras\demo_suite:,我是默认路径,所以我的是:

cd \Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.5\extras\demo_suite

然后分别执行以下两个命令:

.\bandwidthTest.exe
.\deviceQuery.exe

在这里插入图片描述
在这里插入图片描述

如果Result都为PASS的话则配置成功!

3)、都安装好之后,我们可以继续输入nvidia-smi查看CUDA的信息,然后根据安装版本的信息再去实现其他的库(环境)安装和使用!

nvidia-smi

在这里插入图片描述

如图所示,可以看到驱动的版本是527.41;最高支持的CUDA版本是12.0版本。

(六)、创建 tensorflow 环境

我这里是使用Anaconda(如果选择这一步,就不需要额外下载python,以及各种常用工具包,它会打包下载好)

1)、打开anaconda prompt

在这里插入图片描述

2)、创建tensorflow环境,输入命令:conda create -n tensorflow python=3.9,表示创建一个名字为tensorflow的环境,这个环境用的python版本是3.9版本的,如果默认创建,会在C盘

w11下载anaconda在d盘,新建的虚拟环境总是在c盘怎么解决

conda create -n tensorflow python=3.9

在这里插入图片描述

3)、创建成功后,输入命令:conda env list,可以看到tensorflow环境已经创建,星号为当前所在环境(基础环境base)。

conda env list

在这里插入图片描述

4)、进入环境,输入命令:activate tensorflow,就可以进入tensorflow环境中

conda activate tensorflow

在这里插入图片描述

如果要退出环境,输入:

conda deactivate

5)、因为我的conda环境在D盘中,所以将路径改了以下。如果anaconda安装的时候是默认路径,这一步不需要。

d:
cd \WorkSoftware\Install\Anaconda3\envs\tensorflow\

在这里插入图片描述

6)、 安装指定版本的tensorflow-gpu,,我安装的是2.7.0,根据你自己的配套版本安装,输入命令:

pip install tensorflow-gpu==2.7.0 -i  https://pypi.mirrors.ustc.edu.cn/simple  

在这里插入图片描述
无报错结束应该是装好了。

7)、打开python环境,导入tensorflow包进行测试 ,查看tensorflow的版本信息, 输入命令:

import tensorflow as tf
  • 如果导入包有以下报错(没有报错请忽略!):
(tensorflow) C:\Users\Rmzh>python
Python 3.9.16 | packaged by conda-forge | (main, Feb  1 2023, 21:28:38) [MSC v.1929 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import tensorflow as tf
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "D:\WorkSoftware\Install\Anaconda3\envs\tensorflow\lib\site-packages\tensorflow\__init__.py", line 41, in <module>
    from tensorflow.python.tools import module_util as _module_util
  File "D:\WorkSoftware\Install\Anaconda3\envs\tensorflow\lib\site-packages\tensorflow\python\__init__.py", line 41, in <module>
    from tensorflow.python.eager import context
  File "D:\WorkSoftware\Install\Anaconda3\envs\tensorflow\lib\site-packages\tensorflow\python\eager\context.py", line 33, in <module>
    from tensorflow.core.framework import function_pb2
  File "D:\WorkSoftware\Install\Anaconda3\envs\tensorflow\lib\site-packages\tensorflow\core\framework\function_pb2.py", line 16, in <module>
    from tensorflow.core.framework import attr_value_pb2 as tensorflow_dot_core_dot_framework_dot_attr__value__pb2
  File "D:\WorkSoftware\Install\Anaconda3\envs\tensorflow\lib\site-packages\tensorflow\core\framework\attr_value_pb2.py", line 16, in <module>
    from tensorflow.core.framework import tensor_pb2 as tensorflow_dot_core_dot_framework_dot_tensor__pb2
  File "D:\WorkSoftware\Install\Anaconda3\envs\tensorflow\lib\site-packages\tensorflow\core\framework\tensor_pb2.py", line 16, in <module>
    from tensorflow.core.framework import resource_handle_pb2 as tensorflow_dot_core_dot_framework_dot_resource__handle__pb2
  File "D:\WorkSoftware\Install\Anaconda3\envs\tensorflow\lib\site-packages\tensorflow\core\framework\resource_handle_pb2.py", line 16, in <module>
    from tensorflow.core.framework import tensor_shape_pb2 as tensorflow_dot_core_dot_framework_dot_tensor__shape__pb2
  File "D:\WorkSoftware\Install\Anaconda3\envs\tensorflow\lib\site-packages\tensorflow\core\framework\tensor_shape_pb2.py", line 36, in <module>
    _descriptor.FieldDescriptor(
  File "D:\WorkSoftware\Install\Anaconda3\envs\tensorflow\lib\site-packages\google\protobuf\descriptor.py", line 561, in __new__
    _message.Message._CheckCalledFromGeneratedFile()
TypeError: Descriptors cannot not be created directly.
If this call came from a _pb2.py file, your generated code is out of date and must be regenerated with protoc >= 3.19.0.If you cannot immediately regenerate your protos, some other possible workarounds are:
 1. Downgrade the protobuf package to 3.20.x or lower.
 2. Set PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION=python (but this will use pure-Python parsing and will be much slower).

More information: https://developers.google.com/protocol-buffers/docs/news/2022-05-06#python-updates
  • 解决上述报错,输入exit()退出python环境导入以下包:
pip install protobuf==3.19.0 -i https://pypi.tuna.tsinghua.edu.cn/simple --trusted-host pypi.tuna.tsinghua.edu.cn

然后重新进入python 环境,查看tensorflow的版本信息, 输入命令:

import tensorflow as tf
tf.__version__

在这里插入图片描述

退出tensorflow环境:

conda deactivate

在这里插入图片描述
同时,conda控制台是默认打开base环境的,如果想管理这一设置

conda config --set auto_activate_base false / true

(七)、测试 Tensorflow-gpu 是否安装成功

  1. 打开Anaconda,选择tensorflow环境,打开spyder,第一次打开需要安装Spyder,直接点下方的install即可。

在这里插入图片描述

  1. 输入以下测试代码:
import tensorflow as tf

print(tf.__version__)
print(tf.test.gpu_device_name())
print(tf.config.experimental.set_visible_devices)
print('GPU:', tf.config.list_physical_devices('GPU'))
print('CPU:', tf.config.list_physical_devices(device_type='CPU'))
print(tf.config.list_physical_devices('GPU'))
print(tf.test.is_gpu_available())
# 输出可用的GPU数量
print("Num GPUs Available: ", len(tf.config.experimental.list_physical_devices('GPU')))
# 查询GPU设备

在这里插入图片描述

  • 出现了当前环境tensorflow的版本以及一些其他信息,我的版本是2.7.0
  • 如果下面出现了True, 那就表明我们的tensorflow-gpu 已经成功的安装好并且能够正常使用了!
  1. 下面来测试一下GPU的运算速度吧!
import tensorflow as tf
import timeit
 
#指定在cpu上运行
def cpu_run():
    with tf.device('/cpu:0'):
        cpu_a = tf.random.normal([10000, 1000])
        cpu_b = tf.random.normal([1000, 2000])
        c = tf.matmul(cpu_a, cpu_b)
    return c
 
#指定在gpu上运行 
def gpu_run():
    with tf.device('/gpu:0'):
        gpu_a = tf.random.normal([10000, 1000])
        gpu_b = tf.random.normal([1000, 2000])
        c = tf.matmul(gpu_a, gpu_b)
    return c

cpu_time = timeit.timeit(cpu_run, number=10)
gpu_time = timeit.timeit(gpu_run, number=10)
print("cpu:", cpu_time, "  gpu:", gpu_time)

在这里插入图片描述

  • 可以看到gpu的速度比cpu还是要快上不少的!
  • 对于机器学习中神经网络模型的训练来说,可以大幅度加快我们的训练进程帮我们节约许多时间,还是十分不错的!

卸载重装

如果安装出错可以卸载重装:
tensorflow-gpu卸载

注:个人安装过程,仅供学习参考,如有不足,欢迎指正!

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

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

相关文章

idea生成类关系图Diagrams

打开或选择该类&#xff0c;此处我以FutureTask类为例 在打开的该类内容内随意地方右键&#xff08;或选中该类文件&#xff09;》选择Diagrams》Show Diagrams》Java Classes此时就可以看到该类的关系图了

剖析C语言字符串函数

目录 前言&#xff1a; 一、strlen函数 功能&#xff1a; 参数和返回值&#xff1a; 注意事项&#xff1a; 返回值是无符号的易错点&#xff1a; strlen函数的模拟实现 1、计数器算法 2、递归算法 3、指针减去指针 二、strcpy函数 功能&#xff1a; 参数和返回值 …

【小沐学NLP】龙猫-InsCode Stable Diffusion 美图活动一期

文章目录 1、应用简介1.1 Stable Diffusion模型1.2 Stable Diffusion WebUI1.3 InsCode平台 2、界面简介2.1 打开Stable Diffusion WebUI2.2 选择模型2.3 选择功能模块2.4 文本输入2.5 参数设置 3、测试3.1 龙猫3.2 恐龙3.3 蓝天白云3.4 美少女战士 4、其他4.1 DALLE 24.2 Drea…

Linux调试工具GDB(2)

文章目录 前言一、数据断点二、x查看内存命令三、深入info命令四、调试中的技巧总结 前言 本篇文章我们继续讲解GDB调试。 一、数据断点 在 GDB (GNU Debugger) 中&#xff0c;数据断点是一种断点类型&#xff0c;它允许你在程序访问指定内存地址的数据时暂停程序的执行。通…

浅聊 【ThreadLocal】(超级详细)

写在开始 : 本文主要讲述 : ThreadLocal简介; 常用API; demo案例; 特点引用场景;以及部分底层原理源码内容。 引言 &#xff1a; 从常见面试题看 ThreadLocal: **①解释 **&#xff1a; ThreadLocal是多线程中对于解决线程安全的一个操作类&#xff0c;它会为每个线程都分 配一…

121、仿真-基于51单片机8路温度 ds18b20多路温度传感器检测仿真设计(Proteus仿真+程序+原理图+参考论文+任务书+流程图等)

摘 要 随着社会经济的高速发展和科技水平的不断进步&#xff0c;温度监控器的运用范围越来越广泛&#xff0c;也渐渐地发展到了核变站的温度监控。温度与人们的生活生产密切相关&#xff0c;比如在核变站的环境下&#xff0c;对温度的监控更是必不可少的&#xff0c;不但能保…

【代码随想录 | Leetcode | 第四天】数组 | 螺旋矩阵 | 59-54

前言 欢迎来到小K的Leetcode|代码随想录|专题化专栏&#xff0c;今天将为大家带来螺旋矩阵的分享✨ 目录 前言59. 螺旋矩阵 II54. 螺旋矩阵总结 59. 螺旋矩阵 II 给你一个正整数 n &#xff0c;生成一个包含 1 到 n2 所有元素&#xff0c;且元素按顺时针顺序螺旋排列的 n x n…

ASIDE-Simulink接口预研报告

ASIDE-Simulink接口预研报告 2018年4月 1 引言 本报告描述ASIDE-Simulink接口的预先研究情况和结果。 2 目的 ASIDE-Simulink接口是ASIDE中的一个模块。它的主要功能是通过解析Simulink模型文件&#xff0c;把Simulink模型中的相关信息导入到ASIDE中&#xff0c;从而把Simu…

Vue-封装组件的案例

1.案例效果 封装要求&#xff1a; ①允许用户自定义title标题 ②允许用户自定义bgcolor背景色 ③允许用户自定义color文本颜色 ④MyHeader组件需要在页面顶部进行fixed固定定位&#xff0c;且z-index等于999 使用示例如下&#xff1a; <template><div class"…

独立、相关和正交的关系以及白噪声

注意如下边缘密度的计算&#xff1a; 第一个题&#xff1a;不独立&#xff0c;不相关&#xff0c;正交 第一个题&#xff1a;独立&#xff0c;不相关&#xff0c;正交 第一个题&#xff1a;独立&#xff0c;不相关&#xff0c;不正交

【第九天】面向程序设计_类

类 是一种数据结构&#xff0c;它可以包含数据&#xff0c;成员&#xff0c;常量和变量函数&#xff0c;成员方法&#xff0c;属性&#xff0c;构造函数和析构函数等和嵌套类型。 类的声明 在程序中类适用class关键字来声明的语法如下: class 类名 { }类的成员 类的定义包…

Coursier安装Scala报错Error downloading的解决方法

根据 Scala 官方目前的安装教程 https://docs.scala-lang.org/getting-started/index.html&#xff0c;我们下载 cs-x86_64-pc-win32.zip 并解压为 cs-x86_64-pc-win32.exe。在 PowerShell 中通过java --version确认 JVM 是否已安装&#xff0c;如果已安装&#xff0c;则切换到…

从代码到内容创作:程序员如何通过自媒体项目实现赚钱?

从代码到内容创作&#xff1a;程序员如何通过自媒体项目实现赚钱&#xff1f; 自媒体项目已成为程序员们实现赚钱的一种创新方式。通过将代码技术与内容创作结合&#xff0c;程序员可以在互联网上建立自己的品牌&#xff0c;并通过以下方式实现收入增长&#xff1a; 技术教程&a…

java学习路程之篇八、知识点、方法介绍、方法的定义和调用格式、方法常见问题、方法重载

文章目录 1、方法介绍2、方法的定义和调用格式3、方法常见问题4、方法重载 1、方法介绍 2、方法的定义和调用格式 3、方法常见问题 4、方法重载

微信小程序三脚猫功夫拿下组件注册与使用

1.局部注册组件 1.1创建components文件夹 1.2创建文件夹MyHeader 1.3选中MyHeader右键 说明&#xff1a;执行此步&#xff0c;将会自己创建四个文件 1.4MyHeader.wxml文件 说明&#xff1a;随便写点h5结构 <view class"sentence">励志语句</view> <…

实验四(双向重发布)7 14

一、配置网络地址&#xff0c;启用OSPF以及环回类型更改&#xff0c;启用RiP&#xff1a; R1&#xff1a; R2&#xff1a; R3&#xff1a; R4&#xff1a;环回接口放置OSPF区域 R5&#xff1a; R6&#xff1a;环回接口放置RIp区域 二、重发布&#xff1a; 未重发布之前&#…

Gitee生成ssh公钥

进入 C:/Users/Administrator/.ssh &#xff0c;没有就手动创建该文件夹 打开cmd输入指令 ssh-keygen -t rsa -C "Gitee SSH Key" -f "C:\Users\.ssh\github_id_rsa"中间通过三次回车键确定查看ssh公钥 type C:\Users\Zzzy\.ssh\github_id_rsa.pub 复制放到…

[LeetCode] #118 杨辉三角

给定一个非负整数 numRows&#xff0c;生成「杨辉三角」的前 numRows 行。 在「杨辉三角」中&#xff0c; 每个数是它左上方和右上方的数的和。 杨辉三角&#xff1a; class Solution { public:vector<vector<int>> generate(int numRows) {vector<vector<…

Linux 动态主机配置协议 DHCP

文章首发地址 如果管理的计算机有几十台&#xff0c;那么初始化服务器配置IP地址、网关和子网掩码等参数是一个繁琐耗时的过程。如果网络结构要更改&#xff0c;需要重新初始化网络参数&#xff0c;使用动态主机配置协议DHCP&#xff08;Dynamic Host Configuration Protocol&a…

Ubuntu U盘只能读取不能写入

Ubuntu U盘只能读取不能写入 1. 问题2. 解决办法 1. 问题 Ubuntu系统下&#xff0c;U盘突然只能读取无法写入 原因是U盘的文件系统损坏&#xff0c;操作系统为了防止进一步毁坏文件系统&#xff0c;而将其设置成了只读 2. 解决办法 查看U盘分区和挂载 $ df -h 解除挂载 $ u…