ssd vs cXtXdX

09.06.2010

Solaris в логах иногда оставляет сообщения, типа
Jun 22 04:07:11
midframe scsi: [ID 799468 kern.info] ssd251 at scsi_vhci0: name g600015d000230b000000000000001707, bus address g600015d000230b000000000000001707

ссылающиеся на ssd имя диска (или на sd, или dad). Как найти соответсвие между экземпляром драйвера и путем, определяемым через cXtXdX ?
Написал для этого небольшой скрипт:
$ ./whatdisk.pl
Device Driver Device SN Device ID
c1t0d0 ssd0 0744BB20JC id1,ssd@n5000cca004141e9c
c1t1d0 ssd1 0816S52E4D id1,ssd@n2000001d38707617
c1t3d0 ssd3 062244LX6L id1,ssd@n20000014c3d9c52d
c1t5d0 ssd4 062244LNCF id1,ssd@n20000014c3d9c1e5
c1t2d0 ssd5 062244LQ4W id1,ssd@n20000014c3d9caa1

Закачать whatdisk.pl

Ссылки в тему:
Немного об именах дисковых устройств в Solaris
man iostat
man sd

Есть такой инструмент – PAR Packager , и сделать exe-шник с его помощью проще простого:

C:\ pp -o filename.exe filename.pl

Не помню, входит ли утилитка в состав ActivePerl. Если что – запускаете ppm из командной строки и устанавливаете PAR. Для любителей рисовать окошки из perl – есть логичное продолжение – tkpp. Недостаток конечно есть – размер exe-шника, да и скорость выполнения – будет точно такой же, как и у perl-скрипта.

Что еще можно использовать?

1. Когда-то, для этого же я использовал perl2exe от IndigoStar. Но так как это коммерческий продукт, то по окончании программа выплевывала строчку о том, что это «незарегистрированная версия». К тому же, как отмечают продвинутые камрады – достаточно просто раскомпилировать обратно и получить исходники.

2. Есть такая утилитка – perlcc. Генерирует исходник на C, который можно потом собрать с помощью компилятора. К сожалению, существует не для всех версий perl – последняя версия 5.8.9 (я когда-то пробовал этот путь, но что-то там получалось не очень весело, типа компилировалось только с VisualStudio , плюс еще какой-то геморой с либами, может быть сейчас что-то и изменилось). Но с точки зрения размера выполняемого файла – без вариантов ;)
ЗЫ – только что попробовал скомпилить скриптик в 2 строки под Solaris – компилится, но при выполнении падает в корку ;(, так что ситуация далека от идеала.

По мотивам стандартной документации Perlvar.

Считать целиком файл в переменную:

open (MOCK, $filename) or die "$!";
local $/;
# переопределяем встроенную переменную "разделитель строк" ($/ или $INPUT_RECORD_SEPARATOR или $RS)
$_ =<MOCK> ;    # захавать моск файл целиком
close (MOCK);

Напечатать содержимое массива:
@a=qw( 1 2fewf wf g ag f);
local $,="\n";
# переопределяем встроенную переменную "разделитель полей" ($, или $OUTPUT_FIELD_SEPARATOR или $OFS)
print @a;

Читать полностью »

Иногда требуется вычислить разницу в днях между двумя датами:

$ perl -e ‘use Date::Calc qw(:all); print Delta_Days(2007,8,17, 2009,3,20)’
581
или, если неустановлен модуль Date::Calc, то

$ perl -e ‘use POSIX; $y0=2007; $m0=8; $d0=17; $y1=2009; $m1=3; $d1=20; printf( «%i\n», POSIX::difftime( POSIX::mktime(0,0,0,$d1,$m1-1,$y1-1900), POSIX::mktime(0,0,0,$d0,$m0-1,$y0-1900) ) / 86400 );’
581

На днях пришлось анализировать два Sun Explorer-а, собранных с одного сервера с периодом в полгода. Так как ничего unix-ового под рукой не было, то попробовал с ходу найти программку, которая сравнивает 2 каталога и выводит отсутствующие файлы и сообственно различия. Вот… сходу бесплатных утилит не нашлось, пришлось написать на perl. Итак, скрипт, который

    находит файлы, отсутствующие во втором каталоге
    находит файлы, отличающиеся по дате модификации и размеру
    находит файлы, отличающиеся по содержанию

Так как написан на perl, то под Windows требует установленного perl (ActivePerl, например) или можно скачать скомпилированный бинарник.

Читать полностью »