【发布时间】:2014-01-21 16:38:50
【问题描述】:
我必须找出属于 OmniOS (Solaris 10) 存储阵列中每个设备的物理磁盘号。我可以通过
获取设备列表cfgadm -al | grep disk-path | cut -c 6-21 | tr 'a-z' 'A-Z'
输出的样子
5000C5005CF65F14
5000C5004F30CC82
...
所以我的想法是编写一个脚本,在其中我dd 每个设备并观察 LED,然后输入闪烁的 LED 的编号。由于存储阵列两侧都有led,我需要能够多次运行脚本,并且每次输入磁盘位置时,我应该不必再次输入。
我目前的想法是遍历从上述命令获得的设备名称列表,然后执行类似的操作
system("dd if=/dev/dsk/c1t${device}d0p0 of=/dev/null bs=1k count=100");
print "which led flashed: ";
my $disk = <STDIN>;
chomp $disk;
system("echo $disk $device >> disk.sorted");
会产生这样的行
21 5000C5005CF65F14
09 5000C5004F30CC82
...
我在第一种情况下看到 led 21 闪烁,在第二种情况下看到 led 9。有 70 个磁盘。
我的问题
我想不出一个好主意如何编写一个可以多次运行的脚本,并且每次运行它都不会破坏我之前输入的值。
任何想法如何做到这一点?
我正在 Linux 上对其进行原型设计。
【问题讨论】:
-
你能澄清一下“它不会破坏我以前输入的值”吗?在您编写的 perl 代码中,每次运行时,都会将新值附加到“disk.sorted”文件中,并且不应破坏之前的值。
-
其实也不错,但我会切换到使用 $f 作为输出文件名并将 $n 写入其中。您需要使用 >> 进行输出重定向才能附加到文件中。
标签: linux perl bash solaris disk