我们有一个激光雷达系统,用于在现场收集数据。处理原始数据的计算机是 Windows 计算机,因此我们使用 NTFS。但是,激光雷达系统本身运行的是 CentOS 7。通常这没有问题。我们在 Windows 上将收集驱动器格式化为 NTFS 或使用 GParted(CentOS 或 Ubuntu)。CentOS 可以很好地挂载和写入它们,Windows 可以读取它们。
不过,我们的客户希望能够使用 CentOS 格式化 LIDAR 系统中的收集驱动器。我认为这将是一项简单的任务,并编写了一个脚本。该脚本可以格式化驱动器,CentOS 会将数据写入其中。但是,使用该脚本后,Windows 将不再识别驱动器。
如果 GParted 可以完成这项工作,那么我的格式化方式肯定有问题。我的程序如下:
umount <mountPoint>
这确保驱动器未被安装。
(echo o; echo n; echo p; echo 1; echo ; echo ; echo w) | fdisk /dev/<driveLetter>
这将使用 fdisk 通过执行以下操作来写入新的分区表:
- o:创建一个新的空的 DOS 分区表
- n:添加新分区
- p:创建主分区
- 1:分区 1
- 默认第一个扇区(480GB 驱动器上显示为 65535)
- 默认的最后一个扇区(在 480GB 驱动器上显示为 937703087)
- w:将表写入磁盘
然后...
mkfs.ntfs -f -L <driveLabel> /dev/<driveLetter>1
这会将驱动器分区 1 格式化为 NTFS。
mount -a
这将重新安装存储驱动器。
Windows 无法看到以这种方式格式化的驱动器。但是,如果我在 Windows 中使用 AOMEI,它将看到驱动器,即使我无法使用它们。它给我的唯一线索是它在驱动器标签上添加了。因此它显示*:
的不是。<driveLabel>
*:<driveLabel>
有人能告诉我我的脚本是否存在缺陷或者我是否遗漏了什么吗?
答案1
根本问题似乎在于 Microsoft(至少在 Windows 7 中)正在寻找的分区类型。使用 fdisk 可能仍然可以实现,但我没有时间进一步测试。
我最终使用 gdisk 而不是 fdisk,并且能够使其工作。
如果有人感兴趣,这里是我修改后的脚本:
umount <mountPoint>
(echo o; echo y; echo n; echo 1; echo ; echo ; echo 0700; echo w; echo y) | gdisk /dev/<driveLetter>
partprobe
umount <mountPoint>
mkfs.ntfs -f -L <driveLabel> /dev/<driveLetter>1
mount -a
使用的 gdisk 选项如下:
- o:创建一个新的空 GUID 分区表(GPT)
- y:验证
- n:添加新的分区表
- 1:分区号
- 默认第一个扇区(显示为 2048)
- 默认最后扇区
- 0700:Microsoft 基本数据的 GUID
- w:将表写入磁盘并退出
- y:验证
经过多次测试后,它看起来效果很好。