我正在运行 Proxmox 作为我的虚拟机管理程序,我将 6 TB 磁盘设置为 ZFS 池。然后我创建了一个虚拟磁盘并将其附加到运行 Ubuntu Server 20.04 的虚拟机,其中它显示为 QEMU 硬盘。我相信所有这些信息并不是那么相关,因为问题出在虚拟机内部,与主机或所使用的存储类型无关,尽管我可能是错的。
因此,一旦进入虚拟机,我就创建了一个 ext4 分区并正常安装。我分配了大约 2 o 3 TB,因为我认为我可以轻松扩展虚拟磁盘并扩大分区。嗯,这种情况有一段时间了,但突然间我可能搞砸了设备 /dev/sdc1 及其文件系统消失了。尽管如此,驱动器仍然可以安装并且所有文件都在那里。
这些是运行“fdisk -l”、“parted”和“partprobe”后得到的输出。磁盘显示为具有循环分区且没有设备 (/dev/sdcX)
➜ ~ fdisk -l
...
Disk /dev/sda: 50 GiB, 53687091200 bytes, 104857600 sectors
Disk model: QEMU HARDDISK
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: 368BBA10-0FA4-4ED3-898D-30F65B772EC7
Device Start End Sectors Size Type
/dev/sda1 2048 4095 2048 1M BIOS boot
/dev/sda2 4096 104857566 104853471 50G Linux filesystem
Disk /dev/sdb: 931.52 GiB, 1000203091968 bytes, 1953521664 sectors
Disk model: QEMU HARDDISK
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0xdbcabab3
Device Boot Start End Sectors Size Id Type
/dev/sdb1 2048 1953521663 1953519616 931.5G 83 Linux
Disk /dev/sdc: 3.93 TiB, 4294967296000 bytes, 8388608000 sectors
Disk model: QEMU HARDDISK
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk /dev/loop8: 73.18 MiB, 76734464 bytes, 149872 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
➜ ~ parted /dev/sdc
GNU Parted 3.3
Using /dev/sdc
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) print
Model: QEMU QEMU HARDDISK (scsi)
Disk /dev/sdc: 4295GB
Sector size (logical/physical): 512B/512B
Partition Table: loop
Disk Flags:
Number Start End Size File system Flags
1 0.00B 4295GB 4295GB ext4
➜ ~ partprobe -s /dev/sdc
/dev/sdc: loop partitions 1
如您所见,931.51 GiB 的磁盘 /dev/sdb 有一个“磁盘标签类型”和“磁盘标识符”,以及一个标记为 /dev/sdb1 且文件系统为“Linux”(ext4)的分区。对于 3.93 TiB 的磁盘 /dev/sdc,情况并非如此。缺少磁盘标签类型”、“磁盘标识符”并且 fdisk 不显示任何分区。尽管如此,parted 确实显示了一个“Loop”类型的分区表和一个 ext4 分区。
这样已经运行了很长一段时间了,我唯一注意到的是性能很差。即使是顺序写入,速度也能达到最高 20 MB/秒,如果通过 Plex 或 Torrent 提供文件,则驱动器的速度至少可达 140 MB/秒。我猜想这种性能可能是由于文件系统“缺乏”或分区表中发生的任何情况造成的。
不管怎样,我想知道是否有任何方法可以在不重新格式化整个文件的情况下解决这个问题,因为我没有足够大的备用硬盘来存储所有文件。我所说的“修复”是指用其文件系统创建一个分区。或者将当前分区表从“Loop”更改为GPT或MRB/DOS,然后创建分区和文件系统。
如果不可能,请告诉我,我将备份必要的文件并尝试找到地方来存储其余文件。
答案1
在评论中您显示了以下输出file -s /dev/sdc
:
/dev/sdc: Linux rev 1.0 ext4 filesystem data, UUID=3cd41499-e6d0-470f-88c1-e828beb07f42 (needs journal recovery) (extents) (64bit) (large files) (huge files)
这表明磁盘确实已经设置为没有分区表。对于虚拟机的数据磁盘,这实际上是一个优点:它允许您在扩展虚拟磁盘后立即扩展文件系统,而无需费心修改分区表。
只需告诉主机系统扩展虚拟磁盘,然后echo 1 > /sys/block/sdc/device/rescan
如果您的虚拟化平台尚未自动通知虚拟机有关磁盘扩展的信息,则可能在虚拟机中,然后您可以扩展文件系统以填充(扩展的)虚拟磁盘resize2fs /dev/sdc
。
性能不佳可能不是由于缺少分区表造成的;而是由于缺少分区表造成的。事实上,省略分区会使磁盘访问稍微简单一些(如果有的话)。
您应该找出您的虚拟化环境允许您的虚拟机使用什么类型的驱动程序。如果环境允许您使用半虚拟化 ( virtio
) 驱动程序,那么这些驱动程序的性能可能比让虚拟化主机模拟 VM 的物理存储控制器的特定模型好几个数量级。