标签列表

everest33

自制力

导航

Linux命令行与shell脚本编程大全第三版(第八章) 管理文件系统

平时记录

※,Linux文件已删除后,解决磁盘空间不释放的问题。参考此文

  • 有个服务器89.9磁盘空间不足,查找文件占用时发现一个奇怪的现象:磁盘空间是2.2T,但是文件的总大小加起来才1T多点,那么磁盘空间哪去了呢?
  • 原来是有些日志文件被删除了,但是删除时仍然有进程在往这个文件里写数据,导致这个文件看似被删除了,但是实际上还在占据着磁盘空间。
  • 解决方法:lsof |grep deleted可以看到哪些被删除的文件仍然占据着空间。如下
    COMMAND      PID    TID           USER   FD      TYPE             DEVICE   SIZE/OFF       NODE          NAME
    taosd       2107                  root  371w      REG              253,0 1268849103934 6483321701 /var/log/taos/taosdlog.1 (deleted)
    ----
    # TID是Task identification number.如果是进程不是任务,则tid为空。
    # size单位是B,上面占用的空间大小是1.2TB!!

    到这里问题就基本排查清楚了,解决这一类问题的方法有很多种,最简单的方法是关闭或重启taosd进程,当然也可以重启操作系统,不过这些并不是最好的方法。对待这种进程不停对文件写日志的操作,要释放文件占用的磁盘空间,最好的方法是在线清空这个文件,具体可以通过如下命令完成:echo "" > /var/log/taos/taosdlog.1通过这种方法,磁盘空间不但可以马上释放,也可保障进程继续向文件写入日志,这种方法经常用于在线清理Apache、Tomcat、Nginx等Web服务产生的日志文件。

  • 补充:执行命令echo "" > /var/log/taos/taosdlog.1时报错文件不存在,于是就创建taos目录和文件,创建完后再次执行命令即可。(实际上,本次操作,创建完taos目录后,被占用的空间就直接被释放了,不知为何)

 

※,89.51无法执行命令,报错:输入输出错误。重启系统后可以正常运行一段时间,但是一段时间后又出现错误。

  • 解决:xfs_repair /dev/mapper/centos-root //修复文件系统。注意需要进入急救模式才能运行。
  • 另外:执行mount -a命令可以查找哪些分区没有正常挂载,如果无法正常挂载此命令会报错。  

※,对磁盘进行分区时,注意MBR分区类型(有的地方也叫dos,msdos)最大只能支持2T的空间,大于2T的空间都无法使用!gpt分区类型支持2T以上的!使用 fdisk命令进行分区时,默认用的MBR类型,但也支持gpt分区。用parted命令来分区同样也支持gpt类型。

  • MBR一般和BIOS引导方式配合使用
  • gpt一般和UEFI引导方式配合使用。

※,linux怎么把现有分区下新增分区,linux新增了磁盘空间 然后怎么增大原有的分区

  • 【总结:尚未验证】
  • 只是删除分区并不会清除数据
  • 思路:删除分区,缩小文件系统空出多余空间,重新分区将多出的空间分一个新的区。

※,【问题记录】mkfs.xfs: cannot open /dev/sdb1: Device or resource busy设备或资源忙:重装系统没有格式化原来的数据盘,在新系统中使用mkfs格式化时报此错。

  • dmsetup ls // 显示datavg1-data1    (253:0)
  • dmsetup remove datavg1-data1 //移除占用,然后就可以使用mkfs格式化了

※,【问题记录参考此文】重装系统后,原来的磁盘/dev/sda上安装的lvm没有做任何操作,此时重新挂载时不能使用/dev/sda挂载,可以使用逻辑卷路径挂载

  • mount /dev/sda /data1 //报错:未知的文件系统类型“LVM2_member”
  • ·mount /dev/vg0/lv0 data1· // 正常

※,【问题记录】机器断电重启,lvm的磁盘没有写在/etc/fstab中自动挂载。手动挂载 mount /dev/mapper/vg0-lv0 /data1 正常,然后在/etc/fstab中写入如下一行(复制的ext4的一行),

  • ·UUID=d09ce3ee-eeb1-426e-acfb-36c5344598a5 /data1          xfs      errors=remount-ro 0       1·

    然后先卸载umount /data1,然后mount -a试验是否可以自动挂载,结果报错:mount: /data1: wrong fs type, bad option, bad superblock on /dev/mapper/vg0-lv0, missing codepage or helper program, or other error.

    看到此报错以为是分区元数据出了问题,各种办法尝试修复(xfs_repair -n /dev/mapper/vg0-lv0, -e参数也尝试了都不行)。然后使用·dmesg|tail·命令看了下系统内核日志,显示:xfs: Unknown parameter 'errors'。原来是参数写错了,改成如下即可:

  • ·UUID=d09ce3ee-eeb1-426e-acfb-36c5344598a5 /data1          xfs      defaults  0 0·


8. 管理文件系统

8.0 磁盘相关知识:

※,硬盘接口分类

  • SATA:用在低端服务器多,理论传输速度达到 600MB/s
  • SAS3:用在中高服务器,,理论传输速度达到1200MB/s
  • PCIE 版本5: 理论传输速度达到32 or 25GT/s,mac上用,当然也最贵
  • SCSI  和 IDE:已淘汰
  • ------------
  • SCSI 和SATA接口的硬盘在Linux系统中表示为sd

※,磁盘相关概念:磁头、柱面、磁道、扇区(个磁道上的一小块扇形区域)

  • 光盘是反光面单面存储数据,机械硬盘是双面都能存储数据。
  • 有多少个磁道就有多少个柱面。磁道从外向内自0开始顺序进行编号,各个磁道上的扇区数是在硬盘格式化时确定的。
  • windows安装系统的C盘或Linux boot分区一般安装在磁盘最外面磁道,因为外面的磁道速度最快。机械硬盘的读取速度和磁头与碟片的相对速度有关,外面磁道的相对速度最快,所以读取速度也最快。机械硬盘的转速目前最高是7200转,基本达到极限了,因为转速再高发热太多可能会烧毁磁盘。
    • 磁盘写数据时,先从外面往里。引导数据一般保存在0磁道0扇区里!系统启动都需要这个引导区里的引导数据来引导系统启动。
  • 每个扇区的大小是固定的,为512B(0.5KB)。扇区是磁盘的最小存储单位。
  • 硬盘的存储容量=磁头数×磁道(柱面)数×每磁道扇区数×每道扇区字节数

8.1 Linux文件系统:Linux的文件系统为我们在硬盘中存储的0和1和应用中使用的文件与目录之间搭建起了一座桥梁。Linux支持多种类型的文件系统管理文件和目录。每种文件系统都在存储设备上实现了虚拟目录结构(参见3.4.1, Linux文件系统),仅特性略有不同。

※,块(block)

  • 操作系统读取硬盘的时候,不会一个个扇区(512字节)地读取,这样效率太低,而是一次性连续读取多个扇区,即一次性读取一个"块"(block)。这种由多个连续扇区组成的"块",是文件存取的最小单位。"块"的大小,最常见的是1KB,即连2个扇区组成一个 block。或4KB,即连续8个扇区组成一个 block。目前文件系统默认的块大小一般是4kb。
  • block块越大,磁盘读取速度越快(因为块比较少,节约了寻址时间),但是浪费空间(因为每个块只能保存一个文件的数据,如果这个文件只有1kb,块的大小是4kb,那么这个1kb的文件也将占用4kb的空间,且其他3kb无法被别的文件使用)。

※,分区

  • 工厂生产的硬盘必须经过低级格式化、分区和高级格式化(文中均简称为格式化)三个处理步骤后,电脑才能利用它们存储数据。其中磁盘的低级格式化通常由生产厂家完成,目的是划定磁盘可供使用的扇区和磁道并标记有问题的扇区(低格也会占用磁盘扇区空间,一般厂家会占用前面几个字节来保存低格数据,所以我们拿到的硬盘的前几个字节是无法被使用的。另外每个分区的前两个字节一般也不能被用户使用,因为每个分区的第一个扇区要保存操作系统的loader(注意区分:磁盘的第一个扇区(512KB)存MBR),即使不安装操作系统也会空出来,所以使用fdisk工具分区时,每个分区一般都是从第2048个扇区开始(2048*0.5KB=1MB));而用户则需要使用操作系统所提供的磁盘工具如“fdisk、gdisk”等程序进行硬盘“分区”和“格式化”,所谓格式化就是初始化文件系统。windows中的C、D、E、F盘实际上就是一个个的分区。

  • /swap分区是Linux中的必需的分区。作用是在系统的物理内存不够用的时候,把这部分磁盘空间当做内存来使用。扩容swap分区的步骤如下:
    • 新建一个分区,比如/dev/sdb4,准备给swap。加入容量是1G,原来的swap分区容量是2G,那么操作完毕以下步骤后swap分区将会是3G。
    • mkswap /dev/sdb4 // 格式化成swap分区
    • swapon /dev/sdb4 // 激活swap,将/dev/sdb4加入到swap分区中。这个是临时生效,永久生效需加入/etc/fstab
    • 在/etc/fstab中添加: /dev/sdb4 swap swap defaults 0 0

※,磁盘两种分区表:MBR(Master Boot Record) 和 GPT(Globally Unique Identifier Partition Table全局唯一标识符分区表,也叫做GUID分区表)

MBR:BIOS模式只能使用MBR分区表格式的磁盘引导操作系统,GPT硬盘可以作为数据存储盘。

  • 在Linux中,使用fdisk -l查看,MBR分区表格式的硬盘被标记为dos。
  • MBR,Master Boot Record主引导记录。为方便计算机访问硬盘数据,硬盘划分为512字节的扇区,通过为每个扇区分配逻辑地址,以扇区为单位进行寻址,MBR就是硬盘的第一个扇区,记录着系统启动信息和硬盘分区表,前446字节是系统引导信息之后的64字节是硬盘分区表信息,最后2字节是结束标志字(55AA)。每个分区项占用16字节,因此最多只能划分4个主分区(注意操作系统只能安装在主分区),尽管后来为了支持更多的分区,引入了扩展分区及逻辑分区的概念(注意扩展分区只是逻辑分区的容器,无法被格式化也无法被直接使用),但每个分区项仍然用16个字节存储,分区项中的扇区逻辑地址使用4字节的32位二进制表示,可以表示的最大扇区号为十六进制的FFFFFFFF,因此可管理的最大空间=最大扇区号*扇区大小(512字节),也就是2TB,超过2TB的硬盘容量无法识别。
  •  

GPT:UEFI模式只能使用GPT分区表格式的磁盘引导操作系统。

  • GPT,Globally Unique Identifier Partition Table全局唯一标识符分区表,也叫做GUID分区表,它是UEFI规范的一部分,为了兼容不支持GPT格式的系统和软件,GPT硬盘的第一扇区仍然保留了MBR,称为PMBR,P是protective保护性的意思。PMBR之后是分区表信息,包括表头和分区表项,表头包含首尾分区表位置和分区数量等信息,分区表项的数量不限制,但widnows限制了最多只允许128个分区,每个分区表项都是128字节,硬盘的尾端则有一个和头部相同的备份分区表,如果头部的分区表损坏,则可以使用尾端备份分区表恢复。128字节的分区表项中,扇区的逻辑地址使用8字节的64位二进制表示,假设一个扇区大小仍为512字节,则GPT硬盘最大可支持的容量为18EB(16,777,216TB),这是一个近乎无限的容量大小。

·BIOS+MBR·,·UEFI+GPT· 【参考此文

  • BIOS模式只能使用MBR分区表格式的磁盘引导操作系统,GPT硬盘可以作为数据存储盘。
  • UEFI模式只能使用GPT分区表格式的磁盘引导操作系统。
  • 使用BIOS+BMR安装系统时一般会在系统分区前创建一个隐藏分区,此分区主要用来存放系统引导文件,如果在安装完系统后删除此分区,会导致系统无法启动。
  • 如果使用UEFI+GPT安装系统时,会生成ESP分区(windows中也叫EFI系统分区)、MSR保留分区、恢复分区和系统主分区。ESP分区存放UEFI引导文件。MSR保留分区是为了调整分区结构而保留的分区,在windows磁盘管理器中不可见,开启动态磁盘功能也需要用到此分区,安装系统会检查此分区是否存在,不可删除。恢复分区包含Windows 恢复环境 (Windows RE),能够修复操作系统无法启动的常见原因。系统主分区则是存放系统文件地方,即我们常见的C盘。
  • 删除所有硬盘分区的情况下或者直接在一整块未分配空间的硬盘上点击下一步进行系统安装,安装程序会自动进行GPT格式分区并安装操作系统。

※,查看磁盘状态信息的命令: 可以看到inode占用大小,block大小,block个数等等

  • ext4文件系统的磁盘(centos6默认的文件系统):·dumpe2fs <partition-name>·
  • xfs文件系统的磁盘(centos7默认的文件系统): ·xfs_info <partition-name>·

※,查看分区文件系统类型的几种方法

  • ·sudo fdisk -l· // 可以查看未挂载的设备
  • ·df -Th [/dev/sda3]· // []中参数可选。-T输出文件系统类型, 在Type列输出。只可以查看已经挂载的分区和文件系统类型。-h 对人类友好化输出。
  • ·sudo parted -l· // 需要root权限运行此命令。parted -l 命令会输出文件系统类型(File system), 其中参数l表示列出所有设备的分区信息。
  • ·blkid· // 查看已格式化分区的UUID和文件系统。使用blkid可以输出分区或分区的文件系统类型,查看TYPE字段输出。
  • ·lsblk -f· // 有些系统可能没有这个命令,需要安装。注意:lsblk -f也可以查看未挂载的文件系统类型。

8.1.1, Linux文件系统大致有三类:

  • 基本的Linux文件系统
    • ext文件系统(扩展文件系统:extended filesystem)。此文件系统内存储的单个文件大小不得超过2 GB。ext文件系统名称中的extended部分来自其跟踪的每个文件的额外数据,如文件名,大小等。
    • ext2文件系统。ext2文件系统还将允许的最大文件大小增加到了2 TB(在ext2的后期版本中增加到了32 TB),以容纳数据库服务器中常见的大文件。除了扩展索引节点表外,ext2文件系统还改变了文件在数据块中存储的方式。ext文件系统常见的问题是在文件写入到物理设备时,存储数据用的块很容易分散在整个设备中(称作碎片化,fragmentation)。数据块的碎片化会降低文件系统的性能,因为需要更长的时间在存储设备中查找特定文件的所有块。保存文件时,ext2文件系统通过按组分配磁盘块来减轻碎片化。通过将数据块分组,文件系统在读取文件时不需要为了数据块查找整个物理设备。
  • 日志文件系统。日志文件系统为Linux系统增加了一层安全性。它不再使用之前先将数据直接写入存储设备再更新索引节点表的做法,而是先将文件的更改写入到临时文件(称作日志,journal)中。在数据成功写到存储设备和索引节点表之后,再删除对应的日志条目。如果系统在数据被写入存储设备之前崩溃或断电了,日志文件系统下次会读取日志文件并处理上次留下的未写入的数据。Linux中有3种广泛使用的日志方法(数据模式,有序模式,回写模式),每种的保护等级都不相同。①数据模式:索引节点和文件都会被写入日志;丢失数据风险低,但性能差。②有序模式:只有索引节点数据会被写入日志,但只有数据成功写入后才删除;在性能和安全性之间取得了良好的折中。③回写模式:只有索引节点数据会被写入日志,但不控制文件数据何时写入;丢失数据风险高,但仍比不用日志好。
    • ext3文件系统。2001年,ext3文件系统被引入Linux内核中。默认情况下,ext3文件系统用有序模式的日志功能。你可以在创建文件系统时用简单的一个命令行选项将ext3文件系统的日志方法改成数据模式或回写模式。虽然ext3文件系统为Linux文件系统添加了基本的日志功能,但它仍然缺少一些功能。例如ext3文件系统无法恢复误删的文件,它没有任何内建的数据压缩功能(虽然有个需单独安装的补丁支持这个功能),ext3文件系统也不支持加密文件。鉴于这些原因,Linux项目的开发人员选择再接再厉,继续改进ext3文件系统。
    • ext4文件系统。ext4文件系统在2008年受到Linux内核官方支持,现在已是大多数流行的Linux发行版采用的默认文件系统,比如Ubuntu。ext4还引入了块预分配技术(block preallocation)。如果你想在存储设备上给一个你知道要变大的文件预留空间,ext4文件系统可以为文件分配所有需要用到的块,而不仅仅是那些现在已经用到的块。ext4文件系统用 0 填满预留的数据块,不会将它们分配给其他文件。
    • Reiser文件系统。2001年,Hans Reiser为Linux创建了第一个称为ReiserFS的日志文件系统。
    • JFS文件系统。JFS(Journaled File System,日志化文件系统)是IBM在1990年为其Unix衍生版AIX开发的。然而直到第2版,它才被移植到Linux环境中。
    • XFS文件系统。XFS日志文件系统是另一种最初用于商业Unix系统而如今走进Linux世界的文件系统。美国硅图公司(SGI)最初在1994年为其商业化的IRIX Unix系统开发了XFS。2002年,它被发布到了适用于Linux环境的版本。
  • 写时复制文件系统(Copy On Write, COW)。采用了日志文件系统,你就必须在安全性和性能之间做出选择。日志式的另一种选择是一种叫作写时复制(copy-on-write,COW)的技术。COW利用快照兼顾了安全性和性能。如果要修改数据,会使用克隆或可写快照。修改过的数据并不会直接覆盖当前数据,而是被放入文件系统中的另一个位置上。即便是数据修改已经完成,之前的旧数据也不会被重写。
    • ZFS文件系统。COW文件系统ZFS是由Sun公司于2005年研发的,用于OpenSolaris操作系统,从2008年起开始向Linux移植,最终在2012年投入Linux产品的使用。
    • Btrf文件系统。Btrfs文件系统是COW的新人,也被称为B树文件系统。它是由Oracle公司于2007年开始研发的。Btrfs在Reiser4的诸多特性的基础上改进了可靠性。

8.2,操作文件系统。当在Linux机器上添加了一块新的硬盘后(可以通过虚拟机模拟添加硬盘),需要对此硬盘进行可分区、创建文件系统、挂载到虚拟目录中的某个目录中,这个硬盘才可以被Linux使用。

8.2.1,创建分区。一块新的存储设备必须先创建分区来容纳文件系统。分区可以是整个硬盘,也可以是部分硬盘。分区命令有fdisk 和 gdisk,对于尚未分区的硬盘来讲,使用fdisk命令分区的磁盘将会使用MBR分区格式,使用gdisk命令分区的磁盘将会使用GPT分区格式注:新版的fdisk命令(Welcome to fdisk (util-linux 2.34))已经可以在MBR和GPT之间进行切换了

8.2.1.1, fdisk:

fdisk工具可以管理分区。它是个交互式程序,允许你输入命令来逐步完成硬盘分区操作。fdisk命令需要超级用户权限。

·fdisk [options] <disk>· // 改变分区表,这个用法是交互式的,通过单个字母来告诉fdisk做什么,单个字母的含义如下表所示。

·fdisk [options] -l [<disk1> <disk2> ...]· //列出指定设备的分区表,并退出。多个设备间用空格分开。

fdisk命令详解
命令 描述
a 设置活动分区标志
b 编辑BSD Unix系统用的磁盘标签
c 设置DOS兼容标志
d 删除分区
l 显示可用的分区类型
m 显示帮助命令选项
n 添加一个新分区
o 创建DOS分区表
p 显示当前分区表
q 退出,不保存更改
s 为Sun Unix系统创建一个新磁盘标签
t 修改分区的系统ID
u 改变使用的存储单位(在两种单位间切换:柱面和扇区)
v 验证分区表
w 将分区表写入磁盘(三思而后行)
x 高级功能

现假设Linux虚拟机上新增了一块硬盘 /dev/sdb, 现对其进行分区,操作过程记录如下:

 

[root@localhost tonux]# fdisk /dev/sdb
欢迎使用 fdisk (util-linux 2.23.2)。

更改将停留在内存中,直到您决定将更改写入磁盘。
使用写入命令前请三思。


命令(输入 m 获取帮助):u
将显示/记录单位更改为柱面(已废弃!)。

命令(输入 m 获取帮助):p

磁盘 /dev/sdb:1073 MB, 1073741824 字节,2097152 个扇区
Units = 柱面 of 16065 * 512 = 8225280 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x0d9f3eb4

设备 Boot Start End Blocks Id System

命令(输入 m 获取帮助):u
将显示/记录单位更改为盲区。【竟然还有个错别字,应该是扇区

命令(输入 m 获取帮助):p

磁盘 /dev/sdb:1073 MB, 1073741824 字节,2097152 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x0d9f3eb4

设备 Boot Start End Blocks Id System

命令(输入 m 获取帮助):n
Partition type:
p primary (0 primary, 0 extended, 4 free)
e extended
Select (default p): p
分区号 (1-4,默认 1):2
起始 扇区 (2048-2097151,默认为 2048):2048【默认从第2048块扇区开始是因为,由于EFI的兴起,要给EFI 代码留磁盘最开始的1M空间.一个扇区512Btype, 2048 * 512Btype = 1024Kb = 1M】
将使用默认值 2048
Last 扇区, +扇区 or +size{K,M,G} (2048-2097151,默认为 2097151):
将使用默认值 2097151
分区 2 已设置为 Linux 类型,大小设为 1023 MiB

命令(输入 m 获取帮助):p

磁盘 /dev/sdb:1073 MB, 1073741824 字节,2097152 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x0d9f3eb4

设备 Boot Start End Blocks Id System
/dev/sdb2 2048 2097151 1047552 83 Linux

命令(输入 m 获取帮助):w
The partition table has been altered!

Calling ioctl() to re-read partition table.
正在同步磁盘。
[root@localhost tonux]#

8.2.1.2, gdisk: gdisk 即GPT fdisk。用法和fdisk相似。

8.2.2,创建文件系统(挂载磁盘或挂载分区前需要先把磁盘格式化创建一个文件系统)。在将数据存储到分区之前,必须用某种文件系统对其进行格式化,这样Linux才能使用它。每种文件系统类型都有自己的命令行程序来格式化分区,如ext4文件系统使用 mkfs.ext4 命令来格式化分区成ext4文件系统。并非所有的文件系统工具都已经默认安装了,可以使用 type 命令查看命令是否已经安装了。·type mkfs.ext4·。每个文件系统命令都有很多命令行选项,允许你定制如何在分区上创建文件系统。所有的文件系统命令都允许通过不带选项的简单命令来创建一个默认的文件系统。centos7.0开始默认文件系统是xfs,centos6是ext4,centos5是ext3

  • ·sudo mkfs.ext4 /dev/sdb2· //注意参数是分区而不是整块磁盘,如果选整块磁盘/dev/sdb,格式化后好像会把分区弄丢
  • ·sudo mkfs.ext4 /dev/sdb· // 格式化整个磁盘的话会有一个警告,询问是否继续

另外还有一个统一的 格式化分区的命令 mkfs, 这个命令最终实际调用的也是各个文件系统各自的命令行工具。mkfs用法如下:

  • ·sudo mkfs -t ext4 /dev/sdb2· // -t参数指定文件系统。

mkfs命令无法调整分区的默认参数(比如块大小默认是4096,无法调整为其他值)。当然这些默认参数最好不要调整。如果想调整这些默认参数可以使用mke2fs命令

  • ·mke2fs [options] <partition-name>· //不建议使用
    • -t <file-system>: 指定格式化成哪个文件系统,如ext4,xfs等
    • -b <N> : 指定block块的大小, 单位为字节
    • -i <N>: 指定多少字节分配一个inode
    • ·mke2fs -t xfs -b 2048 /dev/sdb1·

【问题记录】mkfs.xfs: cannot open /dev/sdb1: Device or resource busy设备或资源忙:重装系统没有格式化原来的数据盘,在新系统中使用mkfs格式化时报此错。

  • ·dmsetup ls· // 显示datavg1-data1    (253:0)
  • ·dmsetup remove datavg1-data1· //移除占用,然后就可以使用mkfs格式化了

8.2.3,挂载磁盘或分区。为分区创建了文件系统之后,下一步是将它挂载到虚拟目录下的某个挂载点,这样就可以将数据存储在新文件系统中了。

  • ·sudo mkdir -p /mnt/testDisk· //在虚拟目录中创建一个挂载点目录。
  • ·sudo mount /dev/sdb2 /mnt/testDisk· //将分区 /dev/sdb2 挂载到目录 /mnt/testDisk。挂载必须挂载分区而不是驱动器本身

8.2.3.1,mount命令的使用:参考此博文

挂载存储媒体

  • Linux文件系统将所有的磁盘都并入一个虚拟目录下。在使用新的物理磁盘之前,需要把它放到虚拟目录下。这项工作称为挂载(mounting)。挂载的是磁盘的某个分区而不是整个磁盘。

  • 查看挂载情况
    • df 命令可以让你很方便地查看所有已挂载磁盘的使用情况. // ·df -h· -h人性化阅读
    • ·findmnt· 查看所有设备挂载情况(树状结构显示)
      • ·findmnt <某个设备> // 看单个设备的挂载情况
    • ·mount· 或 ·mount -l· :查看所有设备挂载情况
    • ·cat /etc/mtab·:查看内核追踪到的已挂载的所有设备. // 实际是个软连接,/etc/mtab -> /proc/self/mounts
      •  /proc/mounts -> self/mounts
  • mount语法:
    • ·mount [选项] device directory· //device指磁盘的一个分区,directory称为挂载点
      •  ·-t vfstype· 选项指明了要挂载的文件系统类型,如 mount -t ext4 device directory。通常不必指定。mount 会自动选择正确的类型。常用类型有:
        光盘或光盘镜像:iso9660
        DOS fat16文件系统:msdos
        Windows 9x fat32文件系统:vfat
        Windows NT ntfs文件系统:ntfs
        Mount Windows文件网络共享:smbfs
        UNIX(LINUX) 文件网络共享:nfs
      • ·sudo mount -a· //-a, --all   mount all filesystems mentioned in fstab。不需要重启就可以挂载/etc/fstab中提到的磁盘。
      • -r:readonly ,只读挂载,不能进行其他操作,和权限无关,介质只能读,多用于冷备份。在mount 查询时时显示 ro
      • -w:read and write,  读写挂载(defaults默认)
      • -L 'LABEL': 以卷标指定挂载设备
      • -U 'UUID':以UUID 指定要挂载的设备
      • -B  --bind:绑定目录到另一个目录上
        • ·mount -B <dirA> <dirB>· // 将目录dirA绑定到目录dirB上,dirA和dirB显示的是同样的东西,互相操作可以互相可见。
      • -o options:( 挂载文件系统的选项) ,多个选项使用逗号分隔。【注】mount的-o选项分为两种:一种是与具体的文件系统无关的选项,一种是特定的文件系统所独有的【比如tmpfs文件系统独有的size选项 ·mount -o size=5128M  -o remount /dev/shm· // 重新挂载tmpfs以重新指定tmpfs的大小。还有下面的smbfs文件系统也有独有的选项username password等
        • ========= 文件系统无关的选项===============
        • async(defaults),sync  异步,同步,内存更改时,同时写磁盘(可以用于重要数据)
        • atime(defaults),noatime  是否在读访问时更新atime
        • diratime(defaults),nodiratime  目录的访问时间戳
        • auto(defaults)/noauto 写在/etc/fstab当中的分区,是否在mount -a时被挂载
        • exec(defatuls)/noexec 在该分区所挂载的目录中的脚本是否可以执行。
        • dev(defaults)/nodev:是否支持在此文件系统上使用设备文件
        • suid(defaults)/nosuid:是否支持suid和sgid权限
        • rw(defaults):采用读写方式挂接设备;/ro:采用只读方式挂接设备
        • nouser(defaults)/user:是否允许普通用户挂载此设备,默认管理员才能挂载
        • acl(centos 7)/^acl(centos 6以下):启用/禁用此文件系统上的acl功能
        • defaults 默认,见以上中的(defaults)
        • -o remount,其他选项(如上面的rw选项等):重新挂载,并修改功能选项(和/etc/fstab选项冲突,则覆盖,不冲突就增加)  例:mount -o remount,ro /dev/sdb1
    • ·umount device· 或 ·umount directory· // umount 命令支持通过设备文件或者是挂载点来指定要卸载的设备。如果有任何程序正在使用设备上的文件,系统就不会允许你卸载它(提示设备busy),有两种方式可以处理busy的情况:
      • ·lsof <device>· or ·lsof <directory>· //查看占用此目录的pid,kill -9 pid,然后即可umount了。
        • =====umount时提示umount: /tmp/sdc1: target is busy.======
        • lsof /mnt/usb/1查看占用此目录的pid,kill -9 pid,然后即可umount了。
      • ·umount -l device· // -l (lazy) 参数可以在设备空闲时再卸载而不是立马就卸载。
      • fuser -v <directory> // 查看正在访问挂载目录的所有进程
      • fuser -km <device / directory> // 终止所有在正访问指定的文件系统的进程

挂载U盘(u盘,优盘)(在centos中验证):exfat 格式的文件系统是通过 fuse (Filesystem in userspace) 模块来支持的

  • 只有固态硬盘、闪盘和存储卡才能格式化成 exFAT,传统硬盘是无法格式化成 exFAT 格式的,因此它是一种专门针对闪存的文件系统。 NTFS是专为传统机械硬盘而设计的,闪盘和各种存储卡很少使用 NTFS 进行分区
  • 安装fuse-exfat 软件包,以下两个软件源皆可以。
    • yum install http://download1.rpmfusion.org/free/el/rpmfusion-free-release-7.noarch.rpm
    • yum install http://li.nux.ro/download/nux/dextop/el7/x86_64/nux-dextop-release-0-5.el7.nux.noarch.rpm 
  • yum install fuse-exfat
  • mount.exfat /dev/sdc1 /mnt/usb/1 或者mount.exfat-fuse /dev/sdc1 /mnt/usb/2

挂载smaba网络存储:参考此文samba是过时存储,漏洞一大堆!!!!!!

  • SMB / CIFS:
    • 服务器消息块 (SMB,Server Message Block ) 协议是一种网络文件共享协议。
    • Common Internet File System - CIFS,即通用因特网文件系统。CIFS 是 SMB 协议的衍生品,即 CIFS 是 SMB 协议的一种特殊实现,由美国微软公司开发。
    • 由于 CIFS 是 SMB 的另一中实现,那么 CIFS 和 SMB 的客户端之间可以互访就不足为奇。
  • Samba: 
    • samba是一组软件包,是Linux支持SMB/CIFS协议(也称S/C)。samba是许多服务以及协议的实现,其包括TCP/IP上的NetBIOS、SMB、CIFS等等协议。
    • amba可以在几乎所有的类UNIX平台上运行。在unix上安装samba后可使用CIFS。
    • Samba在Windows与UNIX系列OS之间搭起一座桥梁,让两者的资源可互通有无。samba是Linux和Windows之间的文件传输工具。samba是模仿Windows网上邻居的SMB的通讯协议,将Linux操作系统“假装成”Windows操作系统,通过网上邻居的方式来进行文件传输的。
    • Samba 既可以用于Windows和Linux之间的共享文件,也一样用于Linux和Linux之间的共享文件
  • Centos安装samba:
    • 确认是否安装了samba: ·rpm -qa samba· // samba、samba-common、samba-client三个程序是必须的
    • 安装samba:·yum install -y samba· //安装完成后如下
      [root@DellR730 tmp]# rpm -qa|grep samba
      samba-common-4.10.16-24.el7_9.noarch
      samba-client-libs-4.10.16-24.el7_9.x86_64
      samba-libs-4.10.16-24.el7_9.x86_64
      samba-4.10.16-24.el7_9.x86_64
      samba-common-libs-4.10.16-24.el7_9.x86_64
      samba-common-tools-4.10.16-24.el7_9.x86_
      [root@DellR730 samba]# systemctl status smb.service 
      ● smb.service - Samba SMB Daemon
         Loaded: loaded (/usr/lib/systemd/system/smb.service; disabled; vendor preset: disabled)
         Active: inactive (dead)
           Docs: man:smbd(8)
                 man:samba(7)
                 man:smb.conf(5)
    •  修改samba配置文件:·/etc/samba/smb.conf·// testparm命令可以此测试配置文件
      [root@DellR730 tmp]# cat /etc/samba/smb.conf
      # See smb.conf.example for a more detailed config file or
      # read the smb.conf manpage.
      # Run 'testparm' to verify the config is correct after
      # you modified it.
      
      [global]
      	workgroup = SAMBA
      	security = user
      
      	passdb backend = tdbsam
      
      	printing = cups
      	printcap name = cups
      	load printers = yes
      	cups options = raw
      
      #[homes]
      #	comment = Home Directories
      #	valid users = %S, %D%w%S
      #	browseable = No
      #	read only = No
      #	inherit acls = Yes
      #
      #[printers]
      #	comment = All Printers
      #	path = /var/tmp
      #	printable = Yes
      #	create mask = 0600
      #	browseable = No
      #
      [print$]
      	comment = Printer Drivers
      	path = /var/lib/samba/drivers
      	write list = @printadmin root
      	force group = @printadmin
      	create mask = 0664
      	directory mask = 0775
      [temp]
              comment = Temporary file space 
              path = /tmp 
              writable = yes 
              browseable = yes 
              available = yes
              public = yes
              read only = no
              guest ok = no
              smb encrypt = disabled
      [root@DellR730 tmp]# 
    • 设置账号用于登录samba服务器,同时并设置密码。设置后重启systemctl restart smb.service
      • useradd sambauser
      • smbpasswd -a sambauser //注意这里设置的是samba服务的密码,也就是Windows服务器连接Linux samba服务时的密码,并不是Linux用户sambauser的密码。
    • 将文件夹设置了chmod -R 777 <dir>后,客户端依然没有权限访问,原因是selinux为Enforcing,将其设置为Permissive即可:·setenforce 0·
  • centos上的samba服务端作用:192.168.89.11上安装了samba服务,设置/tmp目录为共享目录。
    • Windows系统访问centos上的samba服务设置的共享文件(夹)。Windows访问89.11上的共享文件夹
      • 在Windows中win+R,输入\\192.168.89.11(Samba对应的IP地址),输出samba服务的用户名和密码: sambauser/sambauser
    • 作为nas存储挂载到另一个Linux服务器:另外一台Linux机器(Ubuntu20.04LTS 192.168.67.27)挂载centos上的samba服务设置的共享文件(夹):另外一台Linux机器访问89.11上的共享文件夹
      • ubuntu12.10之后,smbfs被cifs代替,首先安装cifs-utils: apt install cifs-utils
      • apt install smbclient,查看samba服务器共享出来的资源,在samba客户端192.168.67.27上执行如下命令查看
        (base) [root@sungrow27 ~]$smbclient -L 192.168.89.11 -U sambauser
        Password for [WORKGROUP\sambauser]:
        
        	Sharename       Type      Comment
        	---------       ----      -------
        	print$          Disk      Printer Drivers
        	temp            Disk      Temporary file space
        	IPC$            IPC       IPC Service (Samba 4.10.16)
        SMB1 disabled -- no workgroup available
        (base) [root@sungrow27 ~]$
      • mkdir -p /tmp/cifs
      • ·mount -t cifs -o username=sambauser,password=sambauser //192.168.89.11/temp /tmp/cifs· //用户名和密码不是89.11的Linux用户名密码,而是89.11上的samba服务的用户名密码
      • 开机启动挂载:两种方法
        • 修改/etc/fstab
        • 在 /etc/rc.local中添加
  • Ubuntu:略
  • Linux上挂载windows共享文件夹:此时windows相当于samba服务端,windows系统中已经集成了samba服务。Linux上无需安装samba服务端
    • windows中设置一个共享文件夹D:\\package\0iso,并设定共享权限
    • Linux服务器上:
      • 安装cifs-utils
      • ·mount -t cifs -o username=tonghuangshan,password=abc@1234 //192.168.35.36/0iso /tmp/cifs· //username为windows登录用户,password为对应的密码,package是共享文件夹,注意实际上windows的共享文件夹0iso的绝对路径是·D:\\package\0iso·,但只需要写·//192.168.35.36/0iso·即可!

挂载NFS网络存储(参考视频教程, 视频教程2):

如果你只是在Linux主机之间共享文件,那NFS将更加简单。NFS(Network File System即网络文件系统)服务可以将远程 Linux 系统上的文件共享资源挂载到本地主机的目录上,从而使得客户端基于TCP/IP协议,像使用本地主机上的资源一样读写远程Linux系统上的共享文件。nfs原理图如下

  • nfs需要启动两个服务:nfs服务和rpc服务(服务名为rpcbind),rpc服务器是nfs客户端和nfs服务端的中介(和这两者都要打交道)。111端口是rpc服务的端口。
    • nfs是c/s架构,nfs客户端的rpc服务通过tcp/ip协议栈与nfs服务端的rpc服务通信。
    • nfs启动时会启动多个随机端口(提供多种功能),将这些随机端口注册到rpc服务中,所以rpc服务必须在nfs服务之前启动!
    • ·rpcinfo -p 127.0.0.1· // 查看rpc在本机注册的端口,其中111是rpc自己启动的端口
  • nfs服务端的配置文件: ·/etc/exports·,配置规则为:·nfs服务端共享目录      客户端1(参数)     客户端2(参数) ...·, 如 ·/public 192.168.89.0/24(rw)·
  • 89.22 QNAP NAS存储:
    • 对于nfs服务,只能挂载 /etc/exports下列出的目录,如果挂载未列出的目录就会报错: access denied by server while mounting
    • 想要在nas上增加新的nfs挂载目录, 可以在web管理页面操作:转到 控制台 >  网络 &  文件服务 > Win/Mac/NFS > NFS 服务,然后点击【点击这里设置网络共享的NFS访问权】,找到待添加目录,在操作栏点击第二个图标(编辑共享文件夹权限),然后选择权限类别中选择NFS主机访问,然后选中访问权限checkbox,填写NFS选项,然后点击应用,然后就可以在/etc/exports中看到新增的挂载目录。
      • 如果想删除已添加的目录,则选中目录,然后取消勾选访问权限这个checkbox,然后点击应用即可!
      • 测试发现,share文件夹比较特殊,添加了nfs共享后,Ubuntu机器就无法挂载nfs共享目录了,但是ESXi还是可以挂载的,不知道哪里出了问题。
  • centos: 需要安装两个包,nfs-utils(包含rpc.nfsd 和 rpc.mountd两个程序)和 rpcbind。
    • rpm -qa nfs-utils rpcbind
    • yum install nfs-utils rpcbind
    • ·showmount -e <nfs_server>· //showmount是nfs-utils中的命令,用于列出指定的nfs服务器上共享了哪些目录, 可以在nfs服务端使用 ·showmount -e 127.0.0.1·在服务端本地查看共享了哪些目录。
    • ·cat /var/lib/nfs/etab· // 检查nfs服务端的共享参数
    • 客户端挂载nfs服务端共享目录命令: ·mount -t nfs <nfs_server_ip>:<directory> <local_dir>·
    • 开机自动挂载nfs: 在/etc/fstab文件中添加如下内容: ·192.168.89.22:/share/NFSv=4/Public/esxi  /data1/tong/mynfsdir  nfs defaults 0 0·
  • ubuntu:

8.2.3.2,记录一个问题:用mount命令挂载后没有任何输出(无报错),用命令查看发现磁盘没有挂载上。

  • 挂载后立即使用·journalctl -xe·命令查看日志(没地方可以查日志时,就要想着查看系统日志,或许有惊喜),可以发现如下信息:
    Dec 09 19:51:04 web02 kernel: XFS (vdb): Mounting V5 Filesystem
    Dec 09 19:51:04 web02 kernel: XFS (vdb): Ending clean mount
    Dec 09 19:51:04 web02 systemd[1]: Unit data1.mount is bound to inactive unit dev-disk-by\x2duuid.device. Stopping, too.
    Dec 09 19:51:04 web02 systemd[1]: Unmounting /data1...
    -- Subject: Unit data1.mount has begun shutting down
    -- Defined-By: systemd
    -- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
    -- 
    -- Unit data1.mount has begun shutting down.
    Dec 09 19:51:04 web02 kernel: XFS (vdb): Unmounting Filesystem
    Dec 09 19:51:04 web02 systemd[1]: Unmounted /data1.
    -- Subject: Unit data1.mount has finished shutting down
    -- Defined-By: systemd
    -- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
    -- 
    -- Unit data1.mount has finished shutting down.
  •  ·systemctl status data1.mount·
  • 解决方法:
    • 1. 将/etc/fstab中的原磁盘信息注释
    • 2. ·systemctl damon-reload· 重新加载data1.mount的systemd配置文件

开机自动挂载/挂载持久化(/etc/fstab):这种挂载文件系统的的方法只是临时挂载,当Linux系统重启后,这个挂载就丢了。要强制Linux系统在启动时自动挂载某个文件系统,可以将其添加到 /etc/fstab 文件中。/etc/fstab文件详解点此。在 /etc/fstab 中添加新的一行:·/dev/sdb2 /mnt/testDisk ext4 defaults 0 0·。添加后每次启动Linux,系统都会自动挂载/dev/sdb2到/mnt/testDisk。

  • ·sudo mount -a·不需要重启机器就可以挂载/etc/fstab中提到的磁盘。

通过UUID挂载:一般服务器都有多个硬盘分区,在重启后,这些分区的逻辑位置加载时可能会发生变动,如果使用传统的设备名称(例如:/dev/sda)方式挂载磁盘,就可能因为磁盘顺序变化而造成混乱。

Linux环境中每个Block Device都有一个全局唯一的UUID,可以标识这个设备,我们可以在fstab中使用UUID替换设备名称,这样就不会产生上述混乱的情况了。

  • ·blkid· // 查看磁盘各分区的UUID。注意磁盘必须用某个文件系统(如xfs文件系统)格式化之后才能使用查看到UUID。
  • ·vim /etc/fstab· //将原来的磁盘名称如/dev/vdb改成UUID,或新增时使用UUID而非传统名称。
    [root@test ~]# blkid
    /dev/sr0: UUID="2021-10-25-15-11-01-00" LABEL="config-2" TYPE="iso9660" 
    /dev/vda1: UUID="5025c7e6-262c-4930-a2be-e32ffddbdf42" TYPE="xfs" 
    /dev/vda2: UUID="eb5e1ffc-7d7f-4ed3-bd90-0c7d23eeb7c2" TYPE="xfs" 
    /dev/vdb: UUID="3dc40392-960f-4745-aca9-a066313e849f" TYPE="xfs" 
    [root@test ~]# cat /etc/fstab 
    
    #
    # /etc/fstab
    # Created by anaconda on Mon Mar 18 04:25:44 2019
    #
    # <file system> <mount point>   <type>  <options>或者叫<parameters>       <dump>  <pass>
    # Accessible filesystems, by reference, are maintained under '/dev/disk' # See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info # UUID=eb5e1ffc-7d7f-4ed3-bd90-0c7d23eeb7c2 / xfs defaults 0 0 UUID=5025c7e6-262c-4930-a2be-e32ffddbdf42 /boot xfs defaults 0 0 UUID=3dc40392-960f-4745-aca9-a066313e849f /data1 xfs defaults 0 0 [root@test ~]#
  • /etc/fstab中的各列的含义
    • parameters / options
      • Async/sync 设置是否为同步方式运行,默认为async
      • auto/noauto 当下载mount -a 的命令时,此文件系统是否被主动挂载。默认为auto
      • rw/ro 是否以以只读或者读写模式挂载
      • exec/noexec 限制此文件系统内是否能够进行"执行"的操作
      • user/nouser 是否允许用户使用mount命令挂载
      • suid/nosuid 是否允许SUID的存在
      • Usrquota 启动文件系统支持磁盘配额模式
      • Grpquota 启动文件系统对群组磁盘配额模式的支持
      • Defaults 同时具有rw,suid,dev,exec,auto,nouser,async等默认参数的设置
    • dump: 能否被dump备份命令作用。dump是一个用来作为备份的命令。通常这个参数的值为0或者1
      • 0代表不要做dump备份
      • 1代表要每天进行dump的操作
      • 2代表不定日期的进行dump操作
    • pass: 是否检验扇区。开机的过程中,系统默认会以fsck检验我们系统是否为完整(clean)
      • 0:不要检验
      • 1:最早检验(一般根目录会选择)
      • 2:1级别检验完成之后进行检验

8.2.4,文件系统的检查与修复。fsck命令。注意:fsck命令只能在未挂载的文件系统上运行,对大多数文件系统而言,只要卸载文件系统(umount)来进行检查,检查完后重新挂载就好了。但因为根文件系统含有所有核心的Linux命令和日志文件,所以你无法在处于运行状态的系统上卸载它。

  • ·fsck [options] device/directory/UUID· //fsck的参数可以是多个文件系统,文件系统可以通过设备名、在虚拟目录中的挂载点或分配给文件系统的唯一UUID值来引用。
  • ·fsck /dev/sdb2·

8.2.5,常用的磁盘命令:参见 Linux命令行与shell脚本编程大全第三版 学习笔记 (三) - everest33 - 博客园 (cnblogs.com) 之IO篇

8.3,逻辑卷管理。在存储设备分区上直接创建文件系统的一个限制因素是,如果硬盘空间用完了,你无法轻易的改变文件系统的大小。Linux支持逻辑卷管理,这是一种跨多个存储设备创建虚拟分区的方法。这种方法可以轻松的扩展一个已有的文件系统,而不用完全重建。Linux LVM(Logical Volume Manager,逻辑卷管理器)包提供了跨多个存储设备创建逻辑卷的命令行工具。

8.3.1,逻辑卷管理之布局。

逻辑卷管理系统中有三个概念:物理卷(physical volume,PV)、卷组(volume group,VG)、逻辑卷(logical volume,LV)。

  • 物理卷:每个物理卷对应着硬盘上特定的物理分区,也可以是整块未分区的磁盘,也可以是raid磁盘。标准的物理分区需要转换为Linux LVM分区类型,然后才可以被创建为物理卷。
  • 卷组:多个物理卷集中在一起可以形成一个卷组。逻辑卷管理系统会将卷组视为一个物理硬盘,但事实上卷组可能是由分布在多个物理硬盘上的多个物理分区组成的。一个逻辑卷管理系统工程中可以有1个或多个卷组。
  • 逻辑卷:在卷组的基础上可以创建逻辑卷,卷组中的未分配空间可以用于建立新的逻辑卷,逻辑卷建立后可以动态的扩展和缩小空间。逻辑卷管理系统将逻辑卷视为物理分区。可以用任意一种标准的Linux文件系统来格式化逻辑卷,然后再将它加入Linux虚拟目录中的某个挂载点。每个逻辑卷就相当于windows中的 D,E,F,G盘。

下图显示了典型Linux逻辑卷管理环境的基本布局:

图8-1中的卷组横跨了三个不同的物理硬盘,覆盖了五个独立的物理分区。在卷组内部有两个独立的逻辑卷。Linux系统将每个逻辑卷视为一个物理分区。每个逻辑卷可以被格式化成ext4文件系统,然后挂载到虚拟目录中某个特定位置。
注意,图8-1中,第三个物理硬盘有一个未使用的分区。通过逻辑卷管理,你随后可以轻松地将这个未使用分区分配到已有卷组:要么用它创建一个新的逻辑卷,要么在需要更多空间时用它来扩展已有的逻辑卷。
类似地,如果你给系统添加了一块硬盘,逻辑卷管理系统允许你将它添加到已有卷组,为某个已有的卷组创建更多空间,或是创建一个可用来挂载的新逻辑卷。这种扩展文件系统的方法要好用得多。

8.3.2,Linux中的LVM。Linux LVM是由Heinz Mauelshagen开发的,于1998年发布到了Linux社区。它允许你在Linux上用简单的命令行命令管理一个完整的逻辑卷管理环境。Linux LVM有两个版本,lvm1和lvm2。lvm2是lvm1的升级版,现代Linux发行版都提供了对lvm2的支持。

※,使用Linux LVM包创建和管理逻辑卷

  • 第一步:定义物理卷。创建逻辑卷的第一步就是将物理硬盘上的物理分区转换成Linux LVM使用的物理卷区段。在使用fdisk命令创建了基本的物理分区后,使用 t 命令改变分区类型。分区类型 8e 表示这个分区将会被用作Linux LVM系统的一部分,而不是一个直接的文件系统。以下操作对象为/dev/sdb硬盘上的 sdb3分区。【2024年4月9日16:26:28新增:测试了下,修改已有分区的类型(从Linux类型修改为Linux LVM)不会清除原有分区的数据;新增2:新创建的分区可能无法立即被识别到,需要重启机器后才能识别到】
    [root@localhost testDisk]# fdisk /dev/sdb
    欢迎使用 fdisk (util-linux 2.23.2)。
    
    更改将停留在内存中,直到您决定将更改写入磁盘。
    使用写入命令前请三思。
    
    
    命令(输入 m 获取帮助):p
    
    磁盘 /dev/sdb:1073 MB, 1073741824 字节,2097152 个扇区
    Units = 扇区 of 1 * 512 = 512 bytes
    扇区大小(逻辑/物理):512 字节 / 512 字节
    I/O 大小(最小/最佳):512 字节 / 512 字节
    磁盘标签类型:dos
    磁盘标识符:0xa4850bc8
    
       设备 Boot      Start         End      Blocks   Id  System
    /dev/sdb3            2048     2097151     1047552   83  Linux
    
    命令(输入 m 获取帮助):t
    已选择分区 3
    Hex 代码(输入 L 列出所有代码):l
    
     0  空              24  NEC DOS         81  Minix / 旧 Linu bf  Solaris        
     1  FAT12           27  隐藏的 NTFS Win 82  Linux 交换 / So c1  DRDOS/sec (FAT-
     2  XENIX root      39  Plan 9          83  Linux           c4  DRDOS/sec (FAT-
     3  XENIX usr       3c  PartitionMagic  84  OS/2 隐藏的 C:  c6  DRDOS/sec (FAT-
     4  FAT16 <32M      40  Venix 80286     85  Linux 扩展      c7  Syrinx         
     5  扩展            41  PPC PReP Boot   86  NTFS 卷集       da  非文件系统数据 
     6  FAT16           42  SFS             87  NTFS 卷集       db  CP/M / CTOS / .
     7  HPFS/NTFS/exFAT 4d  QNX4.x          88  Linux 纯文本    de  Dell 工具      
     8  AIX             4e  QNX4.x 第2部分  8e  Linux LVM       df  BootIt         
     9  AIX 可启动      4f  QNX4.x 第3部分  93  Amoeba          e1  DOS 访问       
     a  OS/2 启动管理器 50  OnTrack DM      94  Amoeba BBT      e3  DOS R/O        
     b  W95 FAT32       51  OnTrack DM6 Aux 9f  BSD/OS          e4  SpeedStor      
     c  W95 FAT32 (LBA) 52  CP/M            a0  IBM Thinkpad 休 eb  BeOS fs        
     e  W95 FAT16 (LBA) 53  OnTrack DM6 Aux a5  FreeBSD         ee  GPT            
     f  W95 扩展 (LBA)  54  OnTrackDM6      a6  OpenBSD         ef  EFI (FAT-12/16/
    10  OPUS            55  EZ-Drive        a7  NeXTSTEP        f0  Linux/PA-RISC  
    11  隐藏的 FAT12    56  Golden Bow      a8  Darwin UFS      f1  SpeedStor      
    12  Compaq 诊断     5c  Priam Edisk     a9  NetBSD          f4  SpeedStor      
    14  隐藏的 FAT16 <3 61  SpeedStor       ab  Darwin 启动     f2  DOS 次要       
    16  隐藏的 FAT16    63  GNU HURD or Sys af  HFS / HFS+      fb  VMware VMFS    
    17  隐藏的 HPFS/NTF 64  Novell Netware  b7  BSDI fs         fc  VMware VMKCORE 
    18  AST 智能睡眠    65  Novell Netware  b8  BSDI swap       fd  Linux raid 自动
    1b  隐藏的 W95 FAT3 70  DiskSecure 多启 bb  Boot Wizard 隐  fe  LANstep        
    1c  隐藏的 W95 FAT3 75  PC/IX           be  Solaris 启动    ff  BBT            
    1e  隐藏的 W95 FAT1 80  旧 Minix       
    Hex 代码(输入 L 列出所有代码):8e
    已将分区“Linux”的类型更改为“Linux LVM”
    
    命令(输入 m 获取帮助):p
    
    磁盘 /dev/sdb:1073 MB, 1073741824 字节,2097152 个扇区
    Units = 扇区 of 1 * 512 = 512 bytes
    扇区大小(逻辑/物理):512 字节 / 512 字节
    I/O 大小(最小/最佳):512 字节 / 512 字节
    磁盘标签类型:dos
    磁盘标识符:0xa4850bc8
    
       设备 Boot      Start         End      Blocks   Id  System
    /dev/sdb3            2048     2097151     1047552   8e  Linux LVM
    
    命令(输入 m 获取帮助):w
    The partition table has been altered!
    
    Calling ioctl() to re-read partition table.
    
    WARNING: Re-reading the partition table failed with error 16: 设备或资源忙.
    The kernel still uses the old table. The new table will be used at
    the next reboot or after you run partprobe(8) or kpartx(8)
    正在同步磁盘。
    [root@localhost testDisk]#
  • 第二步:用分区来创建实际的物理卷。可以通过 pvcreate 命令完成。·sudo pvcreate /dev/sdb3· pvcreate定义了用于创建物理卷的物理分区。
    [root@localhost testDisk]# pvcreate /dev/sdb3
    WARNING: ext4 signature detected on /dev/sdb3 at offset 1080. Wipe it? [y/n]: y
      Wiping ext4 signature on /dev/sdb3.
      Physical volume "/dev/sdb3" successfully created.
    [root@localhost testDisk]# 
    注:如果出现dev_is_mpath: failed to get device for 8:17,也没关系,只要看到了 successfully created 就没问题。 pvcreate 命令会检查分区是否为多路(multi-path,mpath)设备。如果不是的话,就会发出上面那段消息。

    可以使用 ·sudo pvdisplay /dev/sdb3·查看物理卷信息。pvdisplay 命令显示出/dev/sdb1现在已经被标记为物理卷。注意,输出中的 VG Name 内容为空,因为物理卷还不属于某个卷组。

    [root@localhost testDisk]# pvdisplay /dev/sdb3
      "/dev/sdb3" is a new physical volume of "1023.00 MiB"
      --- NEW Physical volume ---
      PV Name               /dev/sdb3
      VG Name               
      PV Size               1023.00 MiB
      Allocatable           NO
      PE Size               0   
      Total PE              0
      Free PE               0
      Allocated PE          0
      PV UUID               1KcEJK-Uz0s-Fd9Q-ZYUt-F2Te-czef-jFDnoo

   还可以使用 ·pvscan·或·pvs·查看简略的物理卷信息。·pvscan -vv·PV扫描过程信息

  • 第三步:创建卷组。可以将所有的可用物理卷加到一个卷组,也可以结合不同的物理卷创建多个卷组。·sudo vgcreate myVg /dev/sdb3· // 使用物理卷/dev/sdb3(注意:这里是PV的名字)创建一个名为myVg的卷组。如果想用两个PV创建一个vg,命令如下:·vgcreate <vg-name> <pv1> <pv2>·
    [root@localhost testDisk]# vgcreate myVg /dev/sdb3
      Volume group "myVg" successfully created
    [root@localhost testDisk]# 

    可以使用·sudo vgdisplay myVg· 查看卷组细节。或·vgscan·,·vgs·查看简略信息。·vgscan -vv· vg扫描过程信息

    [root@localhost testDisk]# vgdisplay myVg 
      --- Volume group ---
      VG Name               myVg
      System ID             
      Format                lvm2
      Metadata Areas        1
      Metadata Sequence No  1
      VG Access             read/write
      VG Status             resizable
      MAX LV                0
      Cur LV                0
      Open LV               0
      Max PV                0
      Cur PV                1
      Act PV                1
      VG Size               1020.00 MiB
      PE Size               4.00 MiB
      Total PE              255
      Alloc PE / Size       0 / 0   
      Free  PE / Size       255 / 1020.00 MiB
      VG UUID               ibQciJ-EFvB-kFCB-OeeI-dfEA-0Dhq-ouMEZJ
       
    [root@localhost testDisk]#
  • 第四步:创建逻辑卷。Linux系统使用逻辑卷来模拟物理分区,并在其中保存文件系统。使用 ·sudo lvcreate -l 100%FREE -n <lv-name> <vg-name>· // 在卷组myVg上创建一个名为lv1的逻辑卷。-l选项定义了要为逻辑卷指定多少可用的卷组空间。注意,你可以按照卷组空闲空间的百分比来指定这个值。本例中为新逻辑卷使用了所有的空闲空间。
    [root@localhost testDisk]# lvcreate -l 100%FREE -n lv1 myVg
      Logical volume "lv1" created.
    [root@localhost testDisk]# 

    直接指定大小的创建方法:创建一个lv名称为bd1,大小为1G: ·lvcreate -L 1G -n bd1 vg0·

    逻辑卷创建完后会设备映射生成的逻辑设备/dev/dm-n,会同时生成“/dev/卷组名”目录,以后在卷组上创建的逻辑卷都会在这个目录里,你可以通过“/dev/卷组名/逻辑卷名” 或“/dev/mapper/卷组名-逻辑卷名” 来访问它对应的逻辑卷。例如vg0卷组中的lv0卷创建完成后就会有/dev/vg0/lv0 和/dev/mapper/vg0-lv0两个链接文件链接到/dev/dm-1。

使用·sudo lvdisplay myVg·查看卷组myVg上的逻辑卷细节。注意参数是卷组名称。或·lvscan·,·lvs·查看lv简略信息。·lvscan -vv· lv扫描过程信息

[root@localhost testDisk]# lvdisplay myVg
  --- Logical volume ---
  LV Path                /dev/myVg/lv1
  LV Name                lv1
  VG Name                myVg
  LV UUID                ooPyXW-2y5J-8k3Y-WEBV-qXqY-bKyU-XHNF5i
  LV Write Access        read/write
  LV Creation host, time localhost.localdomain, 2021-03-13 18:07:29 +0800
  LV Status              available
  # open                 0
  LV Size                1020.00 MiB
  Current LE             255
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     8192
  Block device           253:3
   
[root@localhost testDisk]#

另外,lvcreate命令的可以参数如下所示:

表8-5  lvcreate 的选项
选 项  长选项名  描 述
-c  --chunksize 指定快照逻辑卷的单位大小
-C  --contiguous 设置或重置连续分配策略
-i  --stripes 指定条带数
-I  --stripesize 指定每个条带的大小
-l  --extents 指定分配给新逻辑卷的逻辑区段数,或者要用的逻辑区段的百分比。即按照PE个数指定逻辑卷大小。
-L  --size 指定分配给新逻辑卷的硬盘大小.单位 MB,GB,TB 等
    --minor 指定设备的次设备号
-m  --mirrors 创建逻辑卷镜像
-M  --persistent 让次设备号一直有效
-n  --name 指定新逻辑卷的名称
-p  --permission 为逻辑卷设置读/写权限
-r  --readahead 设置预读扇区数
-R  --regionsize 指定将镜像分成多大的区
-s  snapshot 创建快照逻辑卷
-Z  --zero 将新逻辑卷的前1 KB数据设置为零
  • 第五步:在逻辑卷上创建文件系统。运行完lvcreate命令后,逻辑卷就产生了,但还需要用文件系统来格式化此逻辑卷。·sudo mkfs -t ext4 /dev/myVg/lv1· //将逻辑卷 /dev/myVg/lv1用ext4文件系统格式化。
    [root@localhost testDisk]# mkfs -t ext4 /dev/myVg/lv1
    mke2fs 1.42.9 (28-Dec-2013)
    文件系统标签=
    OS type: Linux
    块大小=4096 (log=2)
    分块大小=4096 (log=2)
    Stride=0 blocks, Stripe width=0 blocks
    65280 inodes, 261120 blocks
    13056 blocks (5.00%) reserved for the super user
    第一个数据块=0
    Maximum filesystem blocks=268435456
    8 block groups
    32768 blocks per group, 32768 fragments per group
    8160 inodes per group
    Superblock backups stored on blocks: 
        32768, 98304, 163840, 229376
    
    Allocating group tables: 完成                            
    正在写入inode表: 完成                            
    Creating journal (4096 blocks): 完成
    Writing superblocks and filesystem accounting information: 完成
    
    [root@localhost testDisk]#
  • 第六步:挂载逻辑卷。在创建了新的文件系统之后,可以用标准Linux  mount 命令将这个卷挂载到虚拟目录中,就跟它是物理分区一样。唯一的不同是你需要用特殊的路径来标识逻辑卷。·sudo mount /dev/myVg/lv1 /mnt/testDisk· //将逻辑卷/dev/myVg/lv1挂载至/mnt/testDisk下。文件系统被挂载之后,就可以访问虚拟目录中的这块新区域了。df  -h显示的逻辑卷的名称规则是:·/dev/mapper/<vgname>-<lvname>·
    [root@localhost testDisk]# df -h
    文件系统                 容量  已用  可用 已用% 挂载点
    devtmpfs                 894M     0  894M    0% /dev
    tmpfs                    910M     0  910M    0% /dev/shm
    tmpfs                    910M   11M  900M    2% /run
    tmpfs                    910M     0  910M    0% /sys/fs/cgroup
    /dev/mapper/centos-root   39G  4.0G   35G   11% /
    /dev/sda1               1014M  184M  831M   19% /boot
    /dev/mapper/centos-home   19G  153M   19G    1% /home
    tmpfs                    182M  4.0K  182M    1% /run/user/42
    tmpfs                    182M   28K  182M    1% /run/user/1000
    /dev/sr0                 4.4G  4.4G     0  100% /run/media/tonux/CentOS 7 x86_64
    [root@localhost testDisk]# mount /dev/myVg/lv1 /mnt/testDisk/
    [root@localhost testDisk]# df -h
    文件系统                 容量  已用  可用 已用% 挂载点
    devtmpfs                 894M     0  894M    0% /dev
    tmpfs                    910M     0  910M    0% /dev/shm
    tmpfs                    910M   11M  900M    2% /run
    tmpfs                    910M     0  910M    0% /sys/fs/cgroup
    /dev/mapper/centos-root   39G  4.0G   35G   11% /
    /dev/sda1               1014M  184M  831M   19% /boot
    /dev/mapper/centos-home   19G  153M   19G    1% /home
    tmpfs                    182M  4.0K  182M    1% /run/user/42
    tmpfs                    182M   28K  182M    1% /run/user/1000
    /dev/sr0                 4.4G  4.4G     0  100% /run/media/tonux/CentOS 7 x86_64
    /dev/mapper/myVg-lv1     988M  2.6M  919M    1% /mnt/testDisk
    [root@localhost testDisk]#
  • 第七步: 修改了/dev/sdb3分区为逻辑卷(lv)后,不要忘记了修改/etc/fstab文件,否则重启时会报错导致无法进入系统。在写入/etc/fstab文件时,最好使用 df -h中显示的格式,即:使用 /dev/mapper/myVg-lv1 而不是/dev/myVg/lv1(当然用/dev/myVg/lv1也行)。·/dev/mapper/myVg-lv1  /mnt/testDisk  ext4  defaults  0 0·

※,扩展某个lv(类似扩展D盘):

  • 新建两个PV:/dev/sda3,/dev/sdb
  • 扩容lv所属的vg:·vgextend <vg_name> /dev/sda3 /dev/sdb· //将这两个PV加入卷组vg中
  • 扩容lv:
    • ·lvextend -L +5G /dev/vg/lv· //有+号,在原来的基础上增加5G
    • ·lvextend -L 30G /dev/vg/lv· //没有+号,容量改变到30G。
  • df -hT查看,/dev/vg/lv实际容量并没有变化,因为系统还不认识刚刚添加进来的磁盘的文件系统,所有还需要对文件系统进行扩容。
    • 对ext4文件系统:·resize2fs /dev/vg/lv· //lv扩容文件系统
    • 对xfs文件系统: ·xfs_growfs /dev/vg/lv· //lv扩容文件系统。注意:xfs文件系统只支持增大分区空间,不支持减少的情况!!!
  • -------------------------
  • vmware Esxi 由镜像生成的虚拟机想扩展原有分区可如下操作:
    • 如分区是Linux类型,则修改为Linux LVM类型,注意修改分区类型不会清除分区数据。
    • 新增分区(如/dev/sda3),新增后可能需要重启机器才能识别新增分区
    • (参考上面)利用新增分区创建pv, 将新创建的pv添加到vg,然后扩展lv, 最后再扩展文件系统
  •  

※,修改LVM。Linux LVM的好处在于能够动态修改文件系统。在Linux有一些工具允许你修改现有的逻辑卷管理配置。下面列出了Linux LVM包中的常见命令。

  • vgchange 激活和禁用卷组
  • vgremove 删除卷组
  • vgextend 将物理卷加到卷组中
  • vgreduce 从卷组中删除物理卷
  • lvextend 增加逻辑卷的大小
  • lvreduce 减小逻辑卷的大小
  • lvresize
  • lvremove 

※,删除lvm的一般步骤:

  • 卸载lv上的文件系统:umount <lv-name> 或 umount <mount-dir-name>
    • ·mount -l·可以查看所有挂载点
  • 删除lv:·lvremove <lv-name>· // 【慎重!】注意删除lv之后原来lv上的数据就会丢失了,再次创建lv会提示是否擦除原有的文件系统,即使选择不擦除并且创建名称一样的lv,也无法再挂载新建的lv,会报错。
  • 删除vg:·vgremove <vg-name>· // 如果vg上有lv且lv上有文件系统,会报错并给出提示
  • 删除pv:·pvremove <pv-name> <pv1-name>· //如果pv属于某个vg,会报错并给出提示。
    • ·vgreduce <vg-name> <pv-name>· //从vg中删除pv

※,lvm其他一些知识点

  • cat /etc/lvm/lvm.conf
  • lvm dumpconfig

8.4,Linux 存储管理神器:system-storage-manager :A single tool to manage your storage.

centos7: 直接安装·yum install system-storage-manager· //自带版本比较老旧0.4,也可以像下面ubuntu一样源码安装。

ubuntu20.04:下载源码安装,源码地址,最新版本1.4

  • 下载后查看说明文档安装即可。即:·python3 setup.py install·//会有个报错不影响使用:error: can't copy 'doc/_build/man/ssm.8': doesn't exist or not a regular file。

ssm使用说明文档。·ssm -h· 可以看到ssm子命令有:{check,resize,create,list,info,add,remove,snapshot,mount,migrate}

  • create命令:例子:创建一个名为mail 的LVM存储池(vg),并在其上创建一个名为mail-lv初始大小为1G的lvm卷,格式化为xfs文件系统,并将其挂载/mail-lv目录下.
    [root@localhost ~]# ssm create -h
    usage: ssm create [-h] [-s SIZE] [-n NAME] [--fstype FSTYPE] [-r LEVEL]
                      [-I STRIPESIZE] [-i STRIPES] [-p POOL] [-e [{luks,plain}]]
                      [-o MNT_OPTIONS] [-v VIRTUAL_SIZE]
                      [device [device ...]] [mount]

     

    • mkdir /mail-lv
    • ssm create -s <lv大小> -n <lv名称> --fstype <lv文件系统类型> -p <卷组名>  <设备> <挂载点>
    • ·ssm create -s 1G -n main-lv --fstype xfs -p mail /dev/sdb3 /dev/sdb9 /mail-lv· //其中/dev/sdb3, /dev/sdb9是刚刚创建的分区
  • list命令:·ssm list {dev/pool/vol/fs/...}· // ssm list --help
  • info命令:新版才有,试验阶段。
    • ·ssm info·//查询所有的item的info
    • ·ssm info /dev/sda· //查询具体某个item的信息

8.5xfs系统备份与还原:xfsdump 与 xfsrestore。

8.5.1: xfsdump 与 xfsrestore 只针对xfs系统 (ext4文件系统的备份和还原命令为dump与restore) ,并且只支持已经挂载的文件系统备份与还原,未挂载的不支持。

8.5.2: 经过实际测试,先xfsdump备份整个系统(根目录),将k8s集群 kubeadm reset掉, 然后xfsrestore恢复到根目录后,重启机器后和原来一样(不重启时不行),达到了备份的目的,赞!!!!

备份:·xfsdump  -f  <备份文件存放位置>  <要备份的分区挂载路径/mnt/point或设备文件/dev/sdb1>·, 注意:备份的路径最后不能以“/”结尾

  • 备份整个分区:· xfsdump -f /opt/dump_sdb1_2  /mnt/point -L dump_sdb1_2  -M sdb1·// 不加-L和-M参数则会交互式填写
    • -L指定备份标签,可以随便写,但最好见文知意。
    • -M指定备份媒体,可以随便写,但最好见文知意。
  • 备份单个文件:·xfsdump  -f  备份文件存放位置  -s 要备份的文件或目录的相对位置  备份文件所在的挂载点·//注意-s后的相对位置是相对最后一个参数挂载点的相对路径。
  • 备份文件夹同单个文件。

查看备份信息备份成功后,可以在/var/lib/xfsdump/inventory目录下看到生成的档案信息

  • # xfsdump  -I(字母大写i)

还原

  • 还原整个分区:·xfsrestore -f  指定备份文件的位置   指定把存备份文件恢复到的目标路径· //注意目标不一定和备份时一致
  • 还原单个文件:·xfsrestore -f  指定备份文件的位置   -s 还原回去的相对路径  还原回去的目录· //注意还原回去的目录不一定和备份时一致。
  • 还原文件夹同单个文件。

增量备份:

  • 先全量备份:xfsdump -f /opt/test-full /sdb1 -L test-full -M media0 //sdb1是挂载点
  • 第一次增量备份:xfsdump -l 1 -f /opt/test-back1 /sdb1 -L test-bak1 -M media0 //相比全量备份只增加了一个参数 -l 1(小写的L)
  • 第二次增量备份:-l 2

增量备份还原:

  • 先还原全量备份:xfsrestore -f /opt/test-full /sdb1/
  • 再还原第一次增量备份:xfsrestore -f /opt/test-back1 /sdb1/  
  • 再还原第二次 增量备份:xfsrestore -f /opt/test-back2 /sdb1/

8.6,RAID(Redundant Array of Independent Disks), 独立磁盘冗余阵列

8.6.1,常见的raid类型

RAID0:

  • 0 :(stripe)条带模式,至少需要两块硬盘,每一份数据平均分成多份存储在多个磁盘中,且都处于一个水平条带上
  • 优点:读写速度提高,用了多少块盘就是多少倍
  • 缺点:无冗余能力(也称容错能力)
  • 空间利用率:多个磁盘的总和,100%
  • 假设一份数据由A1....A8组成,则在RAID0下,数据存储方式如下图:     

RAID1:

  • 1:(mirror)镜像模式,磁盘数量需要2的倍数,两个磁盘中存储的数据完全一致,当一个盘损坏时,数据依然可以进行读写
  • 优点:有冗余能力   
  • 缺点:磁盘利用率 只有50%,写的速度下降
  • 假设一份数据由A1....A4组成,则在RAID1下,数据存储方式如下图:  

RAID2,RAID3,RAID4已被淘汰。

RAID5:

  • 5:check code校验码模式,至少需要三块硬盘,每一次存储数据时,采用条带模式存储到n-1数量的磁盘中,另外一个磁盘存放的是其他几个磁盘中的数据以某种加密方式之后得出的加密数据,且每一次存储,存储加密数据的磁盘都是不断变化的,当其中任何一个盘的数据损坏时,都可以通过加密方式和其余两块磁盘的数据来得知另外一个盘的数据,具有较高的冗余能力      
  • 优点:读写速度快,有冗余能力
  • 缺点:磁盘利用率为n-1/n,两个磁盘损坏时,数据将丢失
  • 假设有4块硬盘,那么每份数据都会分成3分存储在任意三个磁盘上,剩余的一个用来存储校验码。注意每次存储磁盘校验码的磁盘并不一直是同一个,而是不断变化的,可能是4个磁盘中的任何一个磁盘。

组合RAID: 任何两种RAID都可以组合起来,如RAID50, RAID51, RAID10

RAID10

  • 10:mirror+stripe模式,至少需要4快硬盘,先将两块硬盘组成Raid1,然后将两组Raid1组合成Raid0,存储一分数据时,每一Raid1的组合存储的数据都是均分的,然后Raid1组合再用mirror模式存储
  • 优点:读写速度快,冗余能力强
  • 缺点:磁盘利用率为50%

8.6.2,RAID-0-1-5-10搭建及使用

硬RAID:

  • 需要RAID卡,我们的磁盘是接在RAID卡的,由它统一管理和控制。数据也由它来进行分配和维护;它有自己的cpu,处理速度快,实际工作中就是用这个的。而且不同厂商的RAID卡的配置是不一样的,要看说明书来配置,插入硬盘raid卡,配置raid卡,然后在raid磁盘阵列上安装Linux操作系统!  RAID可以和LVM搭配使用。

软RAID:通过操作系统中的软件来实现,工作场景中基本不用,用于理解RAID原理. 使用的命令是mdadm

=================================================

结束标记

posted on 2022-06-13 13:41  everest33  阅读(60)  评论(0编辑  收藏  举报