OpenSolaris source help me adminstor servers

OpenSolarisのソースコードがマシンの管理に役立つ時

自分が使っているマシンのOSのソースコードがみれて助かった件です。 Linuxを使っている人は日常やっているでしょうし、 サンの社内にいるとSolarisでも同じ事ができてしまいます。 しかし、ここ何年も実際にコードを書いたりしていませんので、 Solarisのコードを見て何かすると言うこともありませんでした。 そんなときに、普段が自分が管理しているサーバで簡単に解決する方法が見つからない事態となりました。 未だに E5000 というUltraSPARCIIのマシンで、 A5200 という古いディスクアレイを使っています。 タイミングを逃しまだ、Solaris Volume Manager とufsでファイルシステムを管理しています。 A5200にはそれこそ古い18GBのディスクがついているのですが、 他部署から36GBを大量にもらえることになったので、 少しずつ機会を見て変えていき、まとまった時間がとれる時にzfsにしようと思っていました。 先週になってRAID5で組んでいるファイルシステムのディスクが一台故障しました。 通常ならサービスに連絡して交換してもらうのですが、36GBと入れ替えてしまうことにしました。 自動的にホットスペアのディスクに入れ替わっているのであまり急がなくてもよいので気が楽です。 luxadm コマンドを使ってディスクを入れ替えます。 物理的に入れ替えると、36GBを何に使っていたのかわかりませんが、 どうも通常のSolarisのラベルがないので format コマンドでパーティションを切って、ラベルを書き込もうと思ったところ、

/dev/dsk/c0t16d0s0 is part of SVM volume raid:d300. Please see metaclear(1M).
とでます。 あ、あ、そうだ、最近のSolarisでは(対象のシステムはSolaris 10 + patchです) ちゃんとこの辺を見に行くようになったのだなー、と、思っていると...
partition> label Unable to get current partition map. Cannot label disk when partitions are in use as described. partition>
と怒られどうやっても書けないようです。 うむむむ、ディスクは交換されてしまっているのに、ラベルを更新できないとは。 これだと、一度RAID5のファイルシステムをつぶさないとだめなのか? と一瞬目が眩みました(@ @) 再度ドキュメントを眺めても助けになりそうなのことは書いてありません。 そこで、ソースコードを見てみようと思ったのですが、 昔コードを書くことに携わっていた時と違ってどこにあるかわかりません。 この辺のコードがそうも違わないだろうということで、OpenSolarisを見てみることに。

OpenSolarisのソースブラウザ にアクセスします。 プロジェクトは"onnv"のまま、"File Path"に"format"といれて検索します。 ビンゴ! formatコマンドははやり単独のファイルではなくサブディレクトリの下に置いてあります。 いくつかのソースの元が表示されるのですが、 onnv-gateが一番安定したコードのように思えるのでまずは そのディレクトリ に行きます。 まずはなにか隠しオプションでもないかな?ということで、 main.c を見ます。 main関数のあたりを見ると do_options という関数があるのでこれを見ます。 しかし、どうも該当しそうな隠しオプションは見あたりません。 うーむ。 main.cに戻って、もっと下の方までつらつら見ていきます。 なんとなく init_globals が怪しいので見ます。 関数の下の方に行くと checkdevinuse という関数があり、そのまんまみたいな名前だなと思いながら見に行きます。 そうするとその関数の頭に

288 /\* 289 \* If the user does not want to do in use checking, return immediately. 290 \* Normally, this is handled in libdiskmgt. For format, there is more 291 \* processing required, so we want to bypass the in use checking 292 \* here. 293 \*/ 294 295 if (NOINUSE_SET) 296 return (0);
注文通りの内容ではないですか。 しかし、NOINUSE_SETはなんだろう? 深く考えすクリックします。 そうすると、
233 #define NOINUSE_SET getenv("NOINUSE_CHECK") != NULL
なあんだ、
hostname# setenv NOINUSE_CHECK yes
とでもすれば良いと事がわかります(はい、いまだにcsh使いです)。

ということで、setenvをしてformatコマンドを起動し直すと、ラベルが書き込めました。 逆にこの結果から"NOINUSE_CHECK solaris format"でインターネットを検索すると、 でてきますねぇ。 いろいろインターネットを検索してもわかったことかもしれませんが、 久しぶりにコードを見て、OpenSolarisが役に立った日でした。

投稿されたコメント:

コメント
コメントは無効になっています。
About

user13137902

Search

Archives
« 4月 2014
  
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
   
       
今日
Bookmarks