我正在尝试创建一个脚本来从带有 Solaris 磁盘标签的磁盘中删除所有片。
bash-3.2# prtvtoc /dev/rdsk/c0t2d0s2
* /dev/rdsk/c0t2d0s2 partition map
*
* Dimensions:
* 512 bytes/sector
* 143374738 sectors
* 143374671 accessible sectors
*
* Flags:
* 1: unmountable
* 10: read-only
*
* Unallocated space:
* First Sector Last
* Sector Count Sector
* 34 222 255
*
* First Sector Last
* Partition Tag Flags Sector Count Sector Mount Directory
0 4 00 256 143358065 143358320
8 11 00 143358321 16384 143374704
bash-3.2# fmthard -d 0:00:0x00:0:0 /dev/rdsk/c0t2d0s2
/dev/rdsk/c0t2d0s2: invalid entry exists in vtoc
bash-3.2# uname -prsm
SunOS 5.10 sun4v sparc
bash-3.2#
但是,如果我像这样运行,切片会被删除:
bash-3.2# fmthard -d 0:00:0x00:256:0 /dev/rdsk/c0t2d0s2
问题是:
- 为什么第一个扇区不能为0,它必须大于或等于34?
- 是否可以创建一个空的 vtoc?
该限制是由于磁盘标签是EFI 磁盘标签又名GPT而不是 SMI 又名 VTOC。
另请参阅系统管理指南:设备和文件系统 - EFI 磁盘标签
该
fmthard
错误由vwrite64(int fd, struct dk_gpt *efi, char *devname)函数生成,该函数是efi_write(3EXT)系统调用的包装器。要将磁盘标签类型从 EFI GPT 更改为 Solaris SMI 并销毁磁盘上的所有数据:
从 SMI 到 GPT:
zpool
EFI/GTP 磁盘标签是在使用 ZFS 池中的整个磁盘时由 ZFS 命令创建的。请参见Solaris ZFS 管理指南:ZFS 存储池的组件:在 ZFS 存储池中使用磁盘