我正在尝试创建一个脚本来从具有 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?
答案1
这种限制是由于磁盘标签是EFI 磁盘标签又名谷氨酰胺磷酸酶而不是 SMI 又名 VTOC。
分区(或片)不能与主标签或备份标签重叠,也不能与任何其他分区重叠。EFI 标签的大小通常为 34 个扇区,因此分区通常从扇区 34 开始。此功能意味着没有分区可以从扇区零 (0) 开始。
EFI 标签中不存储任何磁柱、磁头或扇区信息。大小以块为单位报告。
也可以看看系统管理指南:设备和文件系统 - EFI 磁盘标签
错误fmthard
是由vwrite64(int fd,struct dk_gpt *efi,char *devname)函数是一个包装器efi_写入(3EXT)系统调用。
要将磁盘标签类型从 EFI GPT 更改为 Solaris SMI 并销毁磁盘上的所有数据:
bash-3.2# format -e
Searching for disks...done
AVAILABLE DISK SELECTIONS:
.....
1. c0t1d0 <SUN72G cyl 14087 alt 2 hd 24 sec 424>
/pci@780/pci@0/pci@9/scsi@0/sd@1,0
.....
Specify disk (enter its number): 1
selecting c0t1d0
[disk formatted]
format> label
[0] SMI Label
[1] EFI Label
Specify Label type[1]: 0
Auto configuration via format.dat[no]?
Auto configuration via generic SCSI-2[no]?
format> q
bash-3.2#
从 SMI 到 GPT:
format> label
[0] SMI Label
[1] EFI Label
Specify Label type[0]: 1
Warning: This disk has an SMI label. Changing to EFI label will erase all
current partitions.
Continue? yes
format> q
EFI/GTP 磁盘标签是zpool
在 ZFS 池中使用整个磁盘时由 ZFS 命令创建的。请参阅Solaris ZFS 管理指南:ZFS 存储池的组件:使用 ZFS 存储池中的磁盘