复习之linux高级存储管理

一、lvm----逻辑卷管理

1.lvm定义

LVM是 Logical Volume Manager(逻辑卷管理)的简写,它是Linux环境下对磁盘分区进行管理的一种机制。

逻辑卷管理器(LogicalVolumeManager)本质上是一个虚拟设备驱动,是在内核中块设备和物理设备之间添加的一个新的抽象层次,如图所示。它可以将几块磁盘(物理卷,PhysicalVolume)组合起来形成一个存储池或者卷组(VolumeGroup)。LVM可以每次从卷组中划分出不同大小的逻辑卷(LogicalVolume)创建新的逻辑设备。底层的原始的磁盘不再由内核直接控制,而由LVM层来控制。对于上层应用来说卷组替代了磁盘块成为数据存储的基本单元。LVM管理着所有物理卷的物理盘区,维持着逻辑盘区和物理盘区之间的映射。LVM逻辑设备向上层应用提供了和物理磁盘相同的功能,如文件系统的创建和数据的访问等。但LVM逻辑设备不受物理约束的限制,逻辑卷不必是连续的空间,它可以跨越许多物理卷,并且可以在任何时候任意的调整大小。相比物理磁盘来说,更易于磁盘空间的管理。

  • pv  :物理卷,被处理过的物理分区
  • pe:物理扩展,设定存储最小单元
  • vg:物理卷组,捆绑pv到一个组中
  • lv:逻辑卷 分配最终的使用设备

2.实验素材

  • 建立lvm分区
  • 新建目录
  • 建立监控

建立lvm分区:

首先建立分区,然后设置标签--8e 即lvm分区

建立成功后记得wq保存! 以及同步分区表!

实验建立监控查看:watch  -n   1 "pvs;echo ====;vgs;echo =====;lvs;echo =====;df -h /westosdir"

新建目录: /westosdir/

 3. lvm设备建立

(1)创建pv---物理卷

# pvcreate    /dev/vdb3

(2)创建vg---物理卷组

-s设定pe大小位2M

# vgcreate   -s   2M   westos_vg    /dev/vdb3

(3)创建lv---逻辑卷

-L指定大小   -n指定名称

# lvcreate   -L   100M   -n   westos_lv   westos_vg

(4)格式化--创建文件系统

# mkfs.xfs    /dev/westos_vg/westos_lv

(5)挂载设备至目录

# mount /dev/westos_vg/westos_lv     /westosdir/

 监控界面如下:

 4. lvm拉伸

(1)vg容量充足

vg容量为1G.容量充足直接拉伸!

# lvextend   -L   200M   /dev/westos_vg/westos_lv:拉伸到200M

# xfs_growfs   /dev/westos_vg/westos_lv:拉伸文件系统,否则无法使用

 (2)vg容量不足

  •  pvcreate   /dev/vdb5:创建新pv
  • vgextend   westos_vg   /dev/vdb5:扩展vg容量
  • lvextend   -L   1500M   /dev/westos_vg/westos_lv :拉伸lvm
  • xfs_growfs    /dev/westos_vg/westos_lv:格式化文件系统

想要拉伸lvm为1.5G,发现容量不够

 此时进入磁盘,寻找lvm分区来创建新pv

 扩展原来的vg容量,然后进行lvm拉伸,格式化文件系统

 最后查看监控,该设备容量拉伸成功!

 5.lvm缩减

  • 卸载设备:umount   /westosdir
  • 扫描文件大小,看看缩减大小是否合适:e2fsck -f /dev/westos_vg/westos_lv
  • 缩减文件系统: resize2fs /dev/westos_vg/westos_lv 500M
  • 缩减lvm:lvreduce   -L   500M    /dev/westos_vg/westos_lv
  • 重新挂载设备:mount     /dev/westos_vg/westos_lv /westosdir/

(1)前提

缩减lvm设备的前提是:文件系统是ext或者ext4,xfs文件系统不能缩减!

由于之前实验我们使用的是xfs文件系统,因此本节首先给lvm设备更换文件系统!

# mkfs.ext4     /dev/westos_vg/westos_lv:设定文件系统为ext4

 (2)卸载设备+扫描

扫描设备的文件大小,防止lvm缩减太小不可用!

 (3)缩减文件系统+lvm,重新挂载设备

 挂载成功后查看,lvm设备已经成功缩减到500M

 6. vg缩减

  • vgreduce   westos_vg   /dev/vdb3 :把分区3从该vg中缩减
  • pvmove  /dev/vdb3 :删除该pv

假如想缩减3,首先将3的东西转移到5

 pvmove   /dev/vdb3   /dev/vdb5

然后直接将pv3从vg中减去

最后彻底删除pv3

7.lvm快照

LVM 机制还提供了对 LV 做快照的功能,也就是说可以给⽂件系统做⼀个备份,这也是设计 LVM 快照的主要⽬的。快照可以用于记录系统当前状态,以便后续进行回滚操作回到此状态,或将这些状态用于系统备份。这⽐传统的备份技术的效率要⾼很多。创建快照时不⽤停⽌服务,就可以对数据进⾏备份。

  • 创建快照:快照名:westos_lvbackup  原始:/dev/westos_vg/westos_lv
  • 重新挂载即可生效
  • [root@westosa ~]# lvcreate -L 50M -n westos_lvbackup -s /dev/westos_vg/westos_lv Logical volume "westos_lvbackup" created.
    [root@westosa ~]# mount /dev/westos_vg/westos_lvbackup /westosdir/
    

    =================================实验==================================

接上节,建立的lvm设备挂载在/westosdir目录上!

此时在目录中建立10个重要的文件!由于设备挂载在该目录上,因此该设备也有该数据!

 创建该设备的快照,可记录下此时的系统状态!便于备份!

将快照挂载在该目录。

[root@westosa ~]# umount /westosdir 
[root@westosa ~]# lvcreate -L 50M -n westos_lvbackup -s /dev/westos_vg/westos_lv Logical volume "westos_lvbackup" created.
[root@westosa ~]# mount /dev/westos_vg/westos_lvbackup /westosdir/
[root@westosa ~]# df
Filesystem                            1K-blocks    Used Available Use% Mounted on
devtmpfs                                 391196       0    391196   0% /dev
tmpfs                                    419040       0    419040   0% /dev/shm
tmpfs                                    419040    6872    412168   2% /run
tmpfs                                    419040       0    419040   0% /sys/fs/cgroup
/dev/vda3                               9450496 4344352   5106144  46% /
/dev/vda1                                506528  218856    287672  44% /boot
tmpfs                                     83808    1180     82628   2% /run/user/42
tmpfs                                     83808      28     83780   1% /run/user/0
/dev/mapper/westos_vg-westos_lvbackup     96928    6068     90860   7% /westosdir
[root@westosa ~]# ls /westosdir/
westosfile1   westosfile2  westosfile4  westosfile6  westosfile8
westosfile10  westosfile3  westosfile5  westosfile7  westosfile9

如果不小心删除了10个重要的文件,怎么办?

因为有快照的存在,可以恢复!

首先卸载设备,删除快照,重新建立快照,再次挂载至该目录!

发现文件仍然存在!

[root@westosa ~]# umount /westosdir 
[root@westosa ~]# lvremove /dev/westos_vg/westos_lvbackup 
Do you really want to remove active logical volume westos_vg/westos_lvbackup? [y/n]: yLogical volume "westos_lvbackup" successfully removed
[root@westosa ~]# lvcreate -L 50M -n westos_lvbackup -s /dev/westos_vg/westos_lvLogical volume "westos_lvbackup" created.
[root@westosa ~]# mount /dev/westos_vg/westos_lvbackup /westosdir/
[root@westosa ~]# ls /westosdir/
westosfile1   westosfile2  westosfile4  westosfile6  westosfile8
westosfile10  westosfile3  westosfile5  westosfile7  westosfile9

8. lvm设备删除

  • 卸载设备
  • 删除快照
  • 删除lv设备
  • 删除vg
  • 删除pv
[root@westosa ~]# umount /westosdir 
[root@westosa ~]# lvremove /dev/westos_vg/westos_lvbackup 
Do you really want to remove active logical volume westos_vg/westos_lvbackup? [y/n]: yLogical volume "westos_lvbackup" successfully removed
[root@westosa ~]# lvremove /dev/westos_vg/westos_lv
Do you really want to remove active logical volume westos_vg/westos_lv? [y/n]: yLogical volume "westos_lv" successfully removed
[root@westosa ~]# vgremove westos_vg Volume group "westos_vg" successfully removed
[root@westosa ~]# pvremove /dev/vdb3 Labels on physical volume "/dev/vdb3" successfully wiped.

删除成功!查看监控!

 二、vdo(Virtual Data Optimize)----虚拟数据优化器

VDO是一个内核模块,目的是通过压缩和优化重复数据来节省磁盘空间,从而降低数据中心的成本。原理主要是压缩和优化重复数据,优化重复数据就是硬盘里拷贝来相同的数据,以前要占多份空间,现在只需要1份空间就可以了。

1. vdo的创建及使用

  • 前提:vdo必须要用没使用过的硬盘

ps:在创建新硬盘时空间不足,在虚拟机管理界面把其他硬盘删除也不行!!

解决方法:进入主机的硬盘存放地址,删除不用的硬盘!!

983  cd /var/lib/libvirt/images/984  ls985  rm -fr aa.qcow2 qq.qcow2 westosa-2.qcow2 westosa-4.qcow2 bb.qcow2 westosa-1.qcow2 westosa-3.qcow2 westosa-5.qcow2 westos.qcow2

删除后添加新硬盘,发现空间足够了!

  • vdo的安装
  • vdo的创建: vdo create --name=westosvdo --device=/dev/vdb
[root@westosa ~]# dnf install vdo -y
Updating Subscription Management repositories.
Unable to read consumer identity
This system is not registered to Red Hat Subscription Management. You can use subscription-manager to register.
AppStream                                       169 MB/s | 5.8 MB     00:00    
BaseOS                                          144 MB/s | 2.3 MB     00:00    
Package vdo-6.2.2.117-13.el8.x86_64 is already installed.
Dependencies resolved.
Nothing to do.
Complete!
[root@westosa ~]# vdo create --name=westosvdo --device=/dev/vdb
Creating VDO westosvdo
vdo: ERROR - Not enough available memory in system for index requirement of 256M

vdo的创建出现问题,提示内存不足!!!

只需要增加虚拟机的物理内存即可!

 增加后再次创建vdo!成功!

[root@westosa ~]# dnf install vdo -y
Updating Subscription Management repositories.
Unable to read consumer identity
This system is not registered to Red Hat Subscription Management. You can use subscription-manager to register.
Last metadata expiration check: 0:05:08 ago on Sun 30 Jul 2023 02:56:24 PM CST.
Package vdo-6.2.2.117-13.el8.x86_64 is already installed.
Dependencies resolved.
Nothing to do.
Complete!
[root@westosa ~]# vdo create --name=westosvdo --device=/dev/vdb
Creating VDO westosvdoLogical blocks defaulted to 1569686 blocks.The VDO volume can address 6 GB in 3 data slabs, each 2 GB.It can grow to address at most 16 TB of physical storage in 8192 slabs.If a larger maximum size might be needed, use bigger slabs.
Starting VDO westosvdo
Starting compression on VDO westosvdo
VDO instance 0 volume is ready at /dev/mapper/westosvdo
  • 查看vdo的功能

数据压缩和重复检测功能均开启!

[root@westosa ~]# vdo status --name=westosvdo 
VDO status:Date: '2023-07-30 15:06:08+08:00'Node: westosa.org
Kernel module:Loaded: trueName: kvdoVersion information:kvdo version: 6.2.2.117
Configuration:File: /etc/vdoconf.ymlLast modified: '2023-07-30 15:01:44'
VDOs:westosvdo:Acknowledgement threads: 1Activate: enabledBio rotation interval: 64Bio submission threads: 4Block map cache size: 128MBlock map period: 16380Block size: 4096CPU-work threads: 2Compression: enabledConfigured write policy: autoDeduplication: enabledDevice mapper status: 0 12557488 vdo /dev/vdb normal - online online 1049638 2621440Emulate 512 byte: disabledHash zone threads: 1

  •  vdo格式化:文件系统的建立
  • 挂载vdo设备,可以使用拉!
[root@westosa ~]# mkfs.xfs /dev/mapper/westosvdo 
meta-data=/dev/mapper/westosvdo  isize=512    agcount=4, agsize=392422 blks=                       sectsz=4096  attr=2, projid32bit=1=                       crc=1        finobt=1, sparse=1, rmapbt=0=                       reflink=1
data     =                       bsize=4096   blocks=1569686, imaxpct=25=                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0, ftype=1
log      =internal log           bsize=4096   blocks=2560, version=2=                       sectsz=4096  sunit=1 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
[root@westosa ~]# mkdir /westosdir
[root@westosa ~]# mount /dev/mapper/westosvdo /westosdir/
[root@westosa ~]# df
Filesystem            1K-blocks    Used Available Use% Mounted on
devtmpfs                 906060       0    906060   0% /dev
tmpfs                    935132       0    935132   0% /dev/shm
tmpfs                    935132    9784    925348   2% /run
tmpfs                    935132       0    935132   0% /sys/fs/cgroup
/dev/mapper/rhel-root   8374272 4331900   4042372  52% /
/dev/vda1               1038336  234160    804176  23% /boot
tmpfs                    187024    1180    185844   1% /run/user/42
tmpfs                    187024      24    187000   1% /run/user/0
/dev/mapper/westosvdo   6268504   76808   6191696   2% /westosdir

2.vdo的优化重复数据功能测试

  • 建立监控:查看测试结果
[root@westosa ~]# vdostats --human-readable 
Device                    Size      Used Available Use% Space saving%
/dev/mapper/westosvdo     10.0G      4.0G      6.0G  40%           98%
[root@westosa ~]# watch -n 1 vdostats --human-readable 

监控界面如下:

  • 实验素材:将主机大小为797M的截图发给虚拟机的/iso目录

  •  重复数据检测:将/iso的数据复制2次到/westsodir目录,发现之占用了一份空间!

因为此时vdo设备挂载在该目录上!

[root@westosa westosdir]# df
Filesystem            1K-blocks    Used Available Use% Mounted on
devtmpfs                 906060       0    906060   0% /dev
tmpfs                    935132       0    935132   0% /dev/shm
tmpfs                    935132    9784    925348   2% /run
tmpfs                    935132       0    935132   0% /sys/fs/cgroup
/dev/mapper/rhel-root   8374272 5149108   3225164  62% /
/dev/vda1               1038336  234160    804176  23% /boot
tmpfs                    187024    1180    185844   1% /run/user/42
tmpfs                    187024      24    187000   1% /run/user/0
/dev/mapper/westosvdo   6268504   76808   6191696   2% /westosdir
[root@westosa westosdir]# cp -r /iso/ /westosdir/
[root@westosa westosdir]# ls
iso
[root@westosa westosdir]# cp -r /iso/ /westosdir/iso-1
[root@westosa westosdir]# ls
iso  iso-1
[root@westosa westosdir]# du -h *
797M	iso
797M	iso-1

查看监控,两份内容一样的数据只占用了一份空间!!这就是vdo的重复数据优化功能!!

 3. vdo设备开机自动挂载

  • 编辑/etc/fstab文件,注意,需要添加x-systemd.requires=vdo.service

 利用man  vdo命令查看模板

 重启虚拟机后,该设备自动挂载!!

 5. 删除vdo设备

  • 卸载设备
  • 停止设备,ps:停止后还可以打开
  • 删除设备
[root@westosa ~]# umount /westosdir 
[root@westosa ~]# df
Filesystem            1K-blocks    Used Available Use% Mounted on
devtmpfs                 906232       0    906232   0% /dev
tmpfs                    935300       0    935300   0% /dev/shm
tmpfs                    935300    9428    925872   2% /run
tmpfs                    935300       0    935300   0% /sys/fs/cgroup
/dev/mapper/rhel-root   8374272 5149588   3224684  62% /
/dev/vda1               1038336  234460    803876  23% /boot
tmpfs                    187060    1180    185880   1% /run/user/42
tmpfs                    187060       4    187056   1% /run/user/0
[root@westosa ~]# vdo stop --name westosvdo 
Stopping VDO westosvdo
[root@westosa ~]# vdo remove --name westosvdo 
Removing VDO westosvdo
Stopping VDO westosvdo

删除设备后,该vdo设备删除成功!

  • 打开设备
[root@westosa ~]# vdo stop --name westosvdo 
Stopping VDO westosvdo
[root@westosa ~]# vdo start --name westosvdo 
Starting VDO westosvdo
Starting compression on VDO westosvdo
VDO instance 1 volume is ready at /dev/mapper/westosvdo
[root@westosa ~]# df
Filesystem            1K-blocks    Used Available Use% Mounted on
devtmpfs                 906232       0    906232   0% /dev
tmpfs                    935300       0    935300   0% /dev/shm
tmpfs                    935300    9432    925868   2% /run
tmpfs                    935300       0    935300   0% /sys/fs/cgroup
/dev/mapper/rhel-root   8374272 5149608   3224664  62% /
/dev/vda1               1038336  234460    803876  23% /boot
tmpfs                    187060    1180    185880   1% /run/user/42
tmpfs                    187060       4    187056   1% /run/user/0
/dev/mapper/westosvdo   6268504 1711180   4557324  28% /westosdir

注意:打开设备后,该设备自动挂载!记得删除/etc/fstab里的自动挂载语句!

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

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

相关文章

【C++】STL中list的模拟实现(增删查改,迭代器封装,运算符重载)

文章目录 前言大体框架: 一、节点的封装(list_node)二、迭代器的封装(_list_iterator)1.类模板的定义:2.构造函数3.前置,后置4.前置--,后置--5.解引用(operator*())6. ->重载(operator- >…

【腾讯云 Cloud Studio 实战训练营】永不宕机的IDE,Coding Everywhere

【腾讯云 Cloud Studio 实战训练营】永不宕机的IDE,随时随地写代码! 写在最前视频讲解:Cloud Studio活动简介何为腾讯云 Cloud Studio?Cloud Studio简介免费试用,上手无忧Cloud Studio 特点及优势云端开发多种预制环境可选metawo…

ansible自动化运维(二)剧本、角色编写实战

😘作者简介:一名运维工作人员。 👊宣言:人生就是B(birth)和D(death)之间的C(choise),做好每一个选择。 🙏创作不易,动动小…

计数排序算法

计数排序 计数排序说明: 计数排序(Counting Sort)是一种非比较性的排序算法,它通过统计元素出现的次数,然后根据元素出现的次数将元素排列在正确的位置上,从而实现排序。计数排序适用于非负整数或者具有确…

动态sql以及常用的标签

什么是动态sql: 指根据不同的条件生成不同的sql 搭建环境: 建表: create table blog( id varchar(50) not null comment 博客id, title varchar(100) not null comment 博客标题, author varchar(30) not null comment 博客作者, create_ti…

yolo系列笔记(v4-v5)

YOLOv4 YOLOv4网络详解_哔哩哔哩_bilibili 网络结构,在Yolov3的Darknet的基础上增加了CSP结构。 CSP的优点: 加强CNN的学习能力 去除计算瓶颈。 减少显存的消耗。 结构为: 、 其实还是类似与残差网络的结构,保留下采样之前…

分析npm run serve之后发生了什么?

首先需要明白的是,当你在终端去运行 npm run ****,会是什么过程。 根据上图的一个流程,就可以衍生出很多问题。 1,为什么不直接运行vue-cli-service serve? 因为直接运行 vue-cli-service serve,会报错&#xff0c…

【已解决】如果将MySQL数据库中的表生成PDM

数据库表PDM关系图 | 原创作者/编辑:凯哥Java | 分类:经验分享 有时候,我们需要MySQL数据库中的表生成对应的PDM文件,这里凯哥就讲讲第一种将MySQL数据库的表生成对应的PDM文件。 环境准备: MySQL数据库连接客户端&…

<el-date-picker>组件选择开始时间,结束时间自动延长30min

背景&#xff1a;选择开始时间&#xff0c;结束时间自动增加30分钟&#xff0c;结束时间也可重新选择&#xff0c;如图&#xff1a; <el-form-item label"预约开始时间" prop"value1"><el-date-pickersize"large"v-model"ruleForm…

[数据库]对数据库事务进行总结

文章目录 1、什么是事务2、事务的特性&#xff08;ACID&#xff09;3、并发事务带来的问题4、四个隔离级别&#xff1a; 1、什么是事务 事务是逻辑上的一组操作&#xff0c;要么都执行&#xff0c;要么都不执行。 事务最经典也经常被拿出来说例子就是转账了。假如小明要给小红…

如何用12306的积分买火车票

积分买的票是不允许退票的&#xff0c;所以最好自己买票的时候用。 积分获取 是根据价格*5&#xff0c;比如我买的是100元的票就可以获得500积分。

【Git系列】Git到远程仓库

&#x1f433;Git到远程仓库 &#x1f9ca;1. github账号注册&#x1f9ca;2. 初始化本地仓库&#x1f9ca;3. 创建GitHub远程仓库&#x1f9ca;4. 给本地仓库起别名&#x1fa9f;4.1 查看远程库的连接地址&#x1fa9f;4.2 起别名 &#x1f9ca;5. git推送操作&#x1f9ca;6.…

揭秘!头条百科词条创建全过程及技巧解析

随着互联网时代的到来&#xff0c;人们获取信息的方式越来越便捷。作为国内领先的信息平台&#xff0c;头条百科成为了很多人查阅知识的首选。然而&#xff0c;如何在头条上创建百科词条&#xff0c;让更多人了解和熟知自己呢&#xff1f;本文伯乐网络传媒将为您揭开这个谜团&a…

基于C语言 --- 自己写一个三子棋小游戏

C语言程序设计笔记---019 初阶三子棋小游戏(开源)1、arr_main.c程序大纲2、arr_game1.h3、arr_game1.c3.1、 自定义初识化函数 InitBoard( ) 和 自定义显示函数 DisPlayBoard( )3.2、 自定义玩家下棋函数 PlayerMove( )3.4、 自定义电脑下棋函数 ComputerMove( )3.5、 输赢判断…

反射简述

什么是反射反射在java中起到什么样的作用获取class对象的三种方式反射的优缺点图 什么是反射 JAVA反射机制是在运行状态中&#xff0c;对于任意一个类&#xff0c;都能够知道这个类的所有属性和方法&#xff1b;对于任意一个对象&#xff0c;都能够调用它的任意一个方法和属性&…

自然语言处理学习笔记(一)————概论

目录 1.自然语言处理概念 2.自然语言与编程语言的比较 &#xff08;1&#xff09;词汇量&#xff1a; &#xff08;2&#xff09;结构化&#xff1a; &#xff08;3&#xff09;歧义性&#xff1a; &#xff08;4&#xff09;容错性&#xff1a; &#xff08;5&#xff0…

LabVIEW FPGA开发实时滑动摩擦系统

LabVIEW FPGA开发实时滑动摩擦系统 由于非线性摩擦效应的建模和补偿的固有困难&#xff0c;摩擦系统的运动控制已被广泛研究。最近&#xff0c;人们更加关注滑动动力学和滑动定位&#xff0c;作为传统机器人定位的低成本和更灵活的驱动替代方案。摩擦控制器设计和适当选择基础…

【机器学习】Overfitting and Regularization

Overfitting and Regularization 1. 过拟合添加正则化2. 具有正则化的损失函数2.1 正则化线性回归的损失函数2.2 正则化逻辑回归的损失函数 3. 具有正则化的梯度下降3.1 使用正则化计算梯度&#xff08;线性回归 / 逻辑回归&#xff09;3.2 正则化线性回归的梯度函数3.3 正则化…

解决python-opencv:(-215:Assertion failed) _img.empty() in function ‘cv::imwrite‘在将视频分成帧图片,写入时出现的问题

最近在搞视频检测问题&#xff0c;在用到将视频分帧保存为图片时&#xff0c;图片可以保存&#xff0c;但是会出现(-215:Assertion failed) !_img.empty() in function cv::imwrite问题而不能正常运行&#xff0c;在检查代码、检查路径等措施均无果后&#xff0c;了解了视频分帧…

linux实现运行java分包部署

1.打好包之后 找到bin文件夹下的 startup.sh文件 2.cd 进入bin文件夹下 3.执行 sh startup.sh 运行命令 4.如果出现此错误 是Windows和Linux的.sh脚本文件格式不同&#xff0c;如果在脚本中有空行&#xff0c;脚本是在Windows下进行编辑之后上传到linux上去执行的话&#xff0c…