asd*_*min 2 solaris hard-drive
事实:
问题:如果没有VTOC,该格式怎么能将VTOC写入磁盘?
详细问题:创建VTOC,format需要写s2。要写s2,需要VTOC存在。简化:要创建VTOC,VTOC需要存在。如何通过格式避免这种鸡和蛋的问题?
ext #1:如果我标记一个未标记的磁盘 (c2t5006016041E076B0d8s2),则会发生以下情况:
[...]
11157: open("/dev/rdsk/c2t5006016041E076B0d8s2", O_RDWR|O_NDELAY) = 3
[...]
11157/1: write(1, " D i s k n o t l a b".., 33) = 33
11157/1: read(0, 0xFF2B9CD0, 1024) (sleeping...)
11157/1: read(0, " y\n", 1024) = 2
11157/1: open("/dev/rdsk/c3t5006016141E076B0d8s0", O_RDONLY|O_NDELAY) = 4
11157/1: ioctl(4, 0x0417, 0xFFBFED80) Err#22 EINVAL
11157/1: close(4) = 0
11157/1: ioctl(3, 0x04C9, 0xFFBFF52C) = 0
11157/1: ioctl(3, 0x0402, 0xFFBFF644) = 0
11157/1: ioctl(3, 0x0418, 0xFFBFF670) = 0
11157/1: ioctl(3, 0x04C9, 0xFFBFF5B4) = 0
11157/1: ioctl(3, 0x04C9, 0xFFBFF5B4) = 0
11157/1: ioctl(3, 0x04C9, 0xFFBFF5B4) = 0
11157/1: ioctl(3, 0x04C9, 0xFFBFF5B4) = 0
11157/1: ioctl(3, 0x04C9, 0xFFBFF5B4) = 0
11157/1: write(1, "\n\n F O R M A T M E N".., 15) = 15
[...]
Run Code Online (Sandbox Code Playgroud)
那些 ioctl() 调用是什么?他们干干净净地完成了这项工作,但这些电话实际上是什么?
操作系统不使用读/写调用来读取或写入 vtoc。它只需要能够成功打开 s2 设备(这只是到真实设备的符号链接)即可知道是否有磁盘。希望磁盘上不需要存在 s2 切片,以便此打开成功。然后 format 命令使用在设备驱动程序中实现的低级函数来访问和写入 vtoc。您观察到的 ioctl 正是这些调用。
例如。
归档时间: |
|
查看次数: |
4599 次 |
最近记录: |