两个关于linux下硬盘的冷知识

一、除了MBR和GPT分区表以外的loop模式

问:基本上所有的教程都在教你用fdisk和parted工具(或者其他工具)对新加的硬盘进行分区操作,有没有想过是否可以不通过MBR和GPT方式进行分区表写入,直接进行格式化后挂载使用?
答:可以。
直接上测试过程和结果:
两个关于linux下硬盘的冷知识_第1张图片
我在虚拟机下加了个1G的硬盘
两个关于linux下硬盘的冷知识_第2张图片
通过fdisk -l命令查看不到新加的盘,因为是热添加方式又没有重启过,所有需要手动扫描下控制器的接口:

echo "- - -" > /sys/class/scsi_host/host2/scan
fdisk -l

上面的host2是我环境下的,可能是host0、host1等等。如果不出来多试几次。
两个关于linux下硬盘的冷知识_第3张图片
不做任何分区操作,直接进行ext4文件系统的格式化:

mkfs.ext4 /dev/sdd
mke2fs 1.46.5 (30-Dec-2021)
Creating filesystem with 262144 4k blocks and 65536 inodes
Filesystem UUID: db073028-f809-40b1-92eb-ea83cb753c9a
Superblock backups stored on blocks:
        32768, 98304, 163840, 229376

Allocating group tables: done
Writing inode tables: done
Creating journal (8192 blocks): done
Writing superblocks and filesystem accounting information: done

格式化完成后,就可以直接直接挂载这个硬盘了。
我们将这个硬盘挂载到/mnt下看下结果

mount /dev/sdd /mnt/
df -h

两个关于linux下硬盘的冷知识_第4张图片
挂载成功,使用没有任何问题。
还没结束,回到问题上,那什么是loop模式。
我们fdisk -l查看下磁盘类型:
两个关于linux下硬盘的冷知识_第5张图片
可以看到sdb这个硬盘的Disklabel type是dos,也就是MBR分区表,sdc为gpt分区表,但是sdd却没有Disklabel type标识。我们可以通过parted /dev/sdd查看。

parted /dev/sdd
GNU Parted 3.4
Using /dev/sdd
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) print
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdd: 1074MB
Sector size (logical/physical): 512B/512B
Partition Table: loop
Disk Flags:

Number  Start  End     Size    File system  Flags
 1      0.00B  1074MB  1074MB  ext4

ok,现在我们看到这个盘有个Partition Table标签为loop,这个loop其实就是整盘模式标识,意思为直接将整个物理硬盘进行格式化。使用起来没有任何不同,因为现在很少有人直接这样使用了,且也不推荐这样直接格式化硬盘,所有相信知道的人应该不多了吧。

二、将一个新的硬盘挂载到已有数据的路径下会发生什么?

一种可能:原来路径下的文件出现在新硬盘下的存储下。
另一种可能:文件被覆盖,看不到之前路径下的文件。如果是这样,之前路径下文件是被覆盖写入(丢失),还是依然不变?
带着上面的问题,直接上测试:

[root@alma9 ~]# touch /opt/123.txt | echo "aaaaa" > /opt/123.txt
[root@alma9 ~]# cat /opt/123.txt
aaaaa
[root@alma9 ~]#

在/opt/下创建123.txt文件并写入"aaaaa"。
在将上一个问题创建的硬盘sdd挂载到/opt下面,并创建456.txt写入“bbbbb”

[root@alma9 ~]# mount /dev/sdd /opt/
[root@alma9 ~]# ls /opt/
lost+found
[root@alma9 ~]# touch /opt/456.txt | echo "bbbbb" > /opt/456.txt
[root@alma9 ~]# cat /opt/456.txt
bbbbb
[root@alma9 ~]#

发现其实看不到之前创建的123.txt文件,在将sdd卸载掉看123.txt还在吗。

[root@alma9 ~]# umount /dev/sdd
[root@alma9 ~]# ls /opt/
123.txt
[root@alma9 ~]# cat /opt/123.txt
aaaaa
[root@alma9 ~]#

原来的123.txt还在,里面内容也没有被覆写掉。

总结: 在有数据的路径下挂载硬盘,不会覆写掉原有数据,因为原有的数据是存在另外的磁盘上,而重新在挂载磁盘后,写入的文件是写到新磁盘的存储空间里,不会影响到另外磁盘上的数据。
所以如果磁盘空间快使用完并且磁盘之前未做lvm处理的情况,需要在占用空间较多路径下扩展空间,应该先拷贝数据后,在将新磁盘挂载到原路径下,在粘贴回到原路径下磁盘空间中,以确保应用的正确运行。

你可能感兴趣的:(LINUX,linux,运维,服务器)