高森太郎のノート

このページについて

このページは、高森太郎がノート的に何でも書くページです。
主に勉強したこと、自分が知った知識や方法などを中心に、適当に、メモ的に、書き留めてます。

 | 

2016年10月08日 (土曜日)

[]コマンドプロンプトを任意のフォルダをカレントディレクトリにして開始するには コマンドプロンプトを任意のフォルダをカレントディレクトリにして開始するには - 高森太郎のノート を含むブックマーク はてなブックマーク - コマンドプロンプトを任意のフォルダをカレントディレクトリにして開始するには - 高森太郎のノート

背景

コマンドラインアプリケーション用のファイルを特定のフォルダに突っ込んであって、そこからの状態でスタートしたい、と言う時がある。

コマンドプロンプトを起動すると、すでにそのフォルダのプロンプト(例:C:\hoge\fuga\> )が出た状態で開くという事だ。

これ実はかなり簡単にできるんだが、微妙にやり方を忘れるのでメモ。

やり方

まずコマンドプロンプトのショートカットを作る。

次に、エクスプローラを開き、目的のフォルダのフォルダのファイルパスをコピーしたら、それをそのショートカットのプロパティ「作業フォルダ」欄に入れる。

ショートカットは作成するとそのプログラムが入っている場所が作業フォルダになっているが、こうすることでいきなりその場所からスタートできる。

パスや環境変数が通った状態のコマンドプロンプトを呼び出したい

システムの環境変数に書き込むほどじゃないのだが、そのセッションだけに変数が入った状態でコマンドプロンプトを出したいと言う場合がある。また、コマンドプロンプトで作業を開始する前に特定の作業をやらせてから入りたいという場合もあるだろう。

コマンドプロンプトを開いてからバッチファイルを実行しても良いのだが、いきなり起動する方法もある。

この場合は、簡単なバッチファイルを作る。キーワードは二つ。

コマンド説明
cd /d %~dp0バッチファイルが保存されているディレクトリにカレントディレクトリを移す
cmd.exe /Kコマンドプロンプトを呼び出す。本来は/K スイッチはその後にコマンドを記述するのだが、何も指定しないとそのまま空になる。
バッチファイルの最後にexitの代わりにかけば、バッチファイルの内容が終了してもコマンドプロンプトのウインドウが残る

と言う事で、cd /d %~dp0を含むパスを通すとかそういう内容を書いたバッチファイルを作り、最後をcmd.exe /Kで終わらせると、バッチファイルの内容を実行した後で、バッチファイルが存在するディレクトリのコマンドプロンプトが開いたまま残る。

さらにこれらを組み合わせて、前記のショートカットの cmd.exe に続き 引数でバッチファイルを絶対参照で渡しつつ「作業フォルダ」を任意に設定すると言う方法もある。

何に使うの?

ffmpegのディレクトリへのパスと、よく使う引数をあらかじめ変数で仕込んだ上でコマンドプロンプトを開くバッチファイルを作っておき、変換させる、とか、GUIは返って効率悪いけど、手打ちでやるのもなあ、と言う作業をちょっとずつ楽にできる。

[]FreeNAS 9.10.1 U1から9.10.1 U2 にアップグレードしたらGURB errorになり起動できず→CD-ROMから改めてアップグレードで正常に FreeNAS 9.10.1 U1から9.10.1 U2 にアップグレードしたらGURB errorになり起動できず→CD-ROMから改めてアップグレードで正常に - 高森太郎のノート を含むブックマーク はてなブックマーク - FreeNAS 9.10.1 U1から9.10.1 U2 にアップグレードしたらGURB errorになり起動できず→CD-ROMから改めてアップグレードで正常に - 高森太郎のノート

標題がほぼすべてなのだが。

要約。

Web GUIでアップデートしたところ失敗した。起動してこない。

結論から言うと、改めてCD-Rからアップグレードをかけたところ正常に起動できた。

症状

FreeNAS 9.10.1 U2が出ていたので、FreeNAS 9.10.1 U1からアップグレードしたところ、いつまでたっても起動してこない。

コンソールでみると

Welcome to GRUB!
error : attempt to read or write outside of disk 'hd1'
grup rescure > 

と言うことで止まっていた。ぐぬぬ…。

修復の方法

改めて最新のFreeNASのISOインストーライメージをFreeNAS公式サイトからダウンロードしてきて、それでブートし、インストーラーから「アップグレード」を選んで手動でアップデートしたところ、正常に起動できた。

今回の方法が駄目だったときに考えられる復旧オプション

FreeNASの良さとして、きちんと設定ファイルをバックアップしてさえおけば*1きちんと設定ファイルをバックアップしてさえおけば(大事なことなので2回)最悪システム領域がUSBメモリの破損などで完全におかしくなっていたとしても、ゼロから新しい領域にセットアップして、設定を書き戻してやれば元に戻るというところがある。普通だったらシステム領域が飛びました等と言うと大惨事で復旧に時間がかかるわけだが、FreeNASの場合はUSBメモリさえあれば最悪でも1時間弱で復旧が可能。ありがたいです。制作者の方に感謝*2

更に言えば、ZFSは今となってはかなり普及しており、非常に良くできているため、他のFreeNAS搭載のマシンや、他のZFS対応OS(最近だとUbuntuが16.04 LTSでネイティブ対応した)にくっつけて「zpool inport」さえできればほとんどデータ復旧はできるはず。

試したが駄目だったこと

GRUBのコンソールから、lsで探って、と言うLinux式のやり方を試そうとしたが、FreeNASのブート領域はZFSになっているためか、どうも手が出ない感じがある。

もしかしたらやる方法があるかも知れない。

原因?

いくつか推測がたつ。

  1. ブートローダーのアップデートに失敗してブートローダーの領域が破壊された可能性。
    • ただ、今回に限ってはこれは常に発生しうるがそれほどよくは起きないかなー、と思われる。
  2. USBメモリが寿命、
    • だが、ブート領域はRAIDZ1でミラーリングしており、こちらもそう簡単に駄目にならないので、可能性
  3. ググっていて、このエラーはBIOSの対応状況で、読めない領域にブート領域が入るとなることが起きる?とか。
    • 他のOSのOSアップデートの時に起動できなくなったケースの話。このFreeNAS鯖のハードウエアはHP ML110 G6なので、もう気がつけば5年近く使っている。そこに16GBGBのUSBメモリ2本なのだが、FreeNASはアップデートしていくと古い領域がスナップショットとしてのこすことで安全にアップデートできるという仕組みになっている。これが上手くならなかたったのかなあ、とも想像した。CD-ROMからアップデートすると、今までのスナップショット領域が全部一度削除されて、CD-ROMでインストールしたバージョンのみになる。

教訓

  • FreeNASでアップデートしてしばらくし、動作確認がとれたら、古いブートイメージは定期的に消した方がよさそう。

と言う他に、

  • バックアップはできるだけ頻繁にとりましょう。
  • 出先からVPN接続している環境でアップデートとかそう言う馬鹿な真似はやめましょう。手も足も出なくなります。
  • アップグレードするときはせめて確実に設定ファイルのバックアップは取っておきましょう。

と言う基本的なところも…。最近あんまりにも順調に動いていたので、設定ファイルのバックアップを確認したらもう1年近く前にとったっきりで焦った。

*1:実は今回の場合、最後に設定バックアップをとったのが1年近く前とかですごい焦った。順調に動きすぎて全く意識していなかった。あぶねー。いやあ、俺はアホです。業務ではしつっこいほどバックアップとるのに

*2:と言うか日本でもFreeNAS専用アプライアンス売ったらどうですか。FreeNASをベースにしたなんか妙な奴は販売されているみたいなので、本家が乗り出してきたら売れると思うんだけれども。どこか日本の代理店声かけたらどうか。って毎回書いている

 | 
ページの一番上へ