tt555

FireVaultの暗号化が終わらない&くそ重い

Macの機能でFireVaultというのがあるのですが、それをONにしてしまったばかりに暗号化が終わらない&くそ重いという状態に・・・
しかも、FireVaultをOFFにしようとしても、暗号化が終わらなければOFFにできない・・・

OSは、El Capitanです。

困りました。いろいろ試しました。
結果、数ヶ月前にTime Machineでバックアップを取っていたので、数ヶ月前の状態にしました。。

いろいろ試した結果を以下に残します。
場合によっては解消することもあるようです。

基本的にバックアップを取ってから試してみたほうが良いと思います。
何かするたびに10秒以上待たされ、くそ重い状況で大変かと思いますが、頑張って下さい。

FireVaultが進んでいるか確認

「システム環境設定」 > 「セキュリティとプライバシー」 > 「FireVault」にアクセス。
ずっと暗号化の計算中となってる場合は、暗号化が失敗して止まってる可能性があります。

[peg-image src="https://lh3.googleusercontent.com/-TzH-9c81NuI/V9rgpRw0tyI/AAAAAAAAApg/bhVP-6VikcIQHIKYxN9iltn_-2Eo2QoIACHM/s144-o/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588%2B2016-09-16%2B0.39.46.png" href="https://picasaweb.google.com/107888545635181725503/6330619229346994129#6330619225970095906" caption="スクリーンショット 2016-09-16 0.39.46.png" type="image" alt="スクリーンショット 2016-09-16 0.39.46.png" image_size="111x100" ]

念のため、切れるか試してみてもよいかもしれません。
暗号化中なので暗号化が終了してから切ってくださいと出るかと思いますが、これでFireVaultを切れたらラッキーということで。

「FireVaultを切にする・・・」をクリック。
ロックされてクリックできない場合は、「変更するにはカギをクリックします。」の鍵マークをクリックしロックを解除。

[peg-image src="https://lh3.googleusercontent.com/-GXtOgo4hyVs/V9rhfO187PI/AAAAAAAAAps/OLGs1w8p8ooWD4qrlDlifQ3DuyJ1guaogCHM/s144-o/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588%2B2016-09-16%2B0.41.12.png" href="https://picasaweb.google.com/107888545635181725503/6269741668489982689#6330620152899235058" caption="スクリーンショット 2016-09-16 0.41.12.png" type="image" alt="スクリーンショット 2016-09-16 0.41.12.png" image_size="669x516" ]

ディスクの修復を行う

起動時にディスクユーティリティを立ち上げ、ディスクの修復を行ってみてください。
解消することもあるようです。

PRAMをクリア
起動(再起動)時に「command + option + p + r」を押しながら起動。開始音が2回鳴ったらOKです。
ディスクユーティリティを立ち上げる
起動(再起動)時に「command + r」を押しながら起動する。ディスクユーティリティの選択画面が表示されるので、ディスクユーティリティをクリック
暗号化したディスクのロックを解除
おそらく、「Macintosh HD」かと思います。ディスクを選択し、上部メニューの「ファイル」 > 「ロック解除」をクリック。
パスワードを聞かれるので、パスワードを入力。管理者パスワードで解除できるかと。
ディスクの修復
ロック解除したディスクを選択し、「First Aid」をクリックして修復

ディスク修復は以上です。
上部メニューのリンゴマークから再起動してください。

再起動後、暗号化が進むかもしれません。

ターミナルから操作

ターミナルからコマンドでFireVaultを操作してみます。

※コマンドの$は入力不要です。

現在の状態を確認
$ sudo fdesetup status

を実行。「Pending」と表示されたら、暗号化が途中で止まってます。

FireVaultを停止
$ sudo fdesetup disable

を実行。これで停止できれば、FireVaultを切るにできることもあるそうです。

FireVaultで暗号化対象を確認
$ sudo fdesetup list

を実行。「ユーザ名,uuid」の形式で表示されます。

ユーザ名で暗号化対象を指定して、削除
$ sudo fdesetup remove -user [ユーザ名]

を実行。[ユーザ名]の部分は、listで表示されたユーザ名に置き換えてください。エラーが表示されなければ、OKです。

uuidで暗号化対象を指定して、削除
$ sudo fdesetup remove -uuid [uuid]

を実行。[uuid]の部分は、listで表示されたuuidに置き換えてください。エラーが表示されなければ、OKです。

fdesetupコマンドで再起動
$ sudo fdesetup authrestart

を実行。macが再起動されます。再起動後、暗号化が進めば解消されるかと。

以上です。
解消されなければ、他の方法で。

Time Machineで前の状態に戻す

Time Machineで以前、バックアップを取っている場合は、バックアップを取った状態に戻せすことで解消します。
ただし、バックアップの時点の状態になるので、OSやファイルを含め全てが前の状態になります。

ですので、必要なファイル等はどこかに退避しておく必要があります。

「command + r」で起動
起動(再起動)時に「command + r」を押しながら起動する。
Time Machineを選択
リストにTime Machineが出てくるので選択し、説明にそって進めてください。

以上でTime Machineは完了です。
前の状態に戻り、FireVaultの問題が解消したかと思います。

クリーンインストール

クリーンインストールで初期化します。
OSを新しく入れ直すので、その時にFireVaultの設定をOFFにすることで解消します。

[peg-image src="https://lh3.googleusercontent.com/-_A_cs5YBoEY/V9rgoghn7RI/AAAAAAAAApY/etvqASkX34Uir2cXFr__ME5ytP-TChLyQCHM/s144-o/LWScreenShot%2B2016-09-15%2Bat%2B3.14.00%2BPM.png" href="https://picasaweb.google.com/107888545635181725503/6269741668489982689#6330619212753005842" caption="LWScreenShot 2016-09-15 at 3.14.00 PM.png" type="image" alt="LWScreenShot 2016-09-15 at 3.14.00 PM.png" image_size="1001x699" ]

初期化ですので、まっさらな状態になります。。
必要なファイル等はどこかに退避しておく必要があります。

「command + r」で起動
起動(再起動)時に「command + r」を押しながら起動する。
ディスクユーティリティを選択
リストにディスクユーティリティが出てくるので選択。
Macintosh HDを消去
「Macintosh HD」を選択し、消去ボタンをクリック。フォーマットは「OS X 拡張(ジャーナリング)」を選択し、消去。
ディスクユーティリティを閉じる
左上の×ボタンをクリックで閉じる
OS X を再インストール
リストに「OS X を再インストール」が出てくるので選択。あとは画面にそって進めてください。

以上でクリーンインストールは完了です。

まとめ

この問題が発生してしまったら、解消するまでに時間がかかります。
忍耐強く頑張るしかないです。。

何をやってもダメなら最終的にクリーンインストールでなんとかなると思います。
時間をかけたくない場合は、サクッとクリーンインストールしてしまうのも手かと思います。

調べてみたら数年前からこのような現象は起こっているらしく、それでもまだ解消してないなんて、どうなってるんでしょう・・・

【AWS】lambda&cronでEC2起動・停止(EC2のタグで判定)

awsのlambdaとcron(lamron[ラムロン])を使用して、指定した時間にEC2インスタンスを起動&停止する処理を作成します。
起動と停止をするEC2インスタンスの指定は、EC2のタグで判定します。

準備

以下の設定を行っている前提です。

  • IAMでLambdaにec2関連APIの使用許可を設定
  • EC2インスタンスに起動と停止を判定するタグを設定(後述するスクリプトに記載してあるタグ)

Lambdaに起動&停止Functionを作成

lambdaに起動&停止のFunctionを以下のスクリプトを参考に作成してください。
lambdaFunctionを作成するときは、

  • 各自起動&停止したい時間のcronを設定
  • 今回はスクリプト作成にnode.jsを使用
  • 実行する関数名は「handler」

起動スクリプト

// 起動するec2インスタンスのタグ設定
// この場合、キー名が「lambda:start」、値が「default-first」
var targetInstanceParam = {
    Filters: [
        {
            Name: 'tag-key',
            Values: ['lambda:start']// ec2インスタンスに設定するキー名
        },
        {
            Name: 'tag-value',
            Values: ['default-first']// ec2インスタンスに設定する値
        },
    ]
};

var AWS = require('aws-sdk');
AWS.config.region = 'ap-northeast-1'; // 各自の環境に合わせてリージョンを設定

function ec2Start(cb){
    var ec2 = new AWS.EC2();
    var targetInstanceIds = [];
    
    // 指定したタグが設定されているec2インスタンスを取得
    ec2.describeInstances(targetInstanceParam, function(err, data) {
        if (err) console.log(err, err.stack);
        else if(data.Reservations.length === 0) {
            console.log("don't find ec2");
        } else {
            // 取得できた場合、そのec2インスタンスのidを取得し起動
            for (var index in data.Reservations) {
                var instance = data.Reservations[index].Instances[0];
                console.log("instanceId = " + instance.InstanceId);
                targetInstanceIds.push(instance.InstanceId);
            }
            var params = {
                InstanceIds: targetInstanceIds
            };
        
            ec2.startInstances(params, function(err, data) {
                if (!!err) {
                    console.log(err, err.stack);
                } else {
                    console.log(data);
                    cb();
                }
            });
        }
    });
}
// 初めに実行する関数
exports.handler = function(event, context) {
    // ログ出力(不要であれば削除)
    console.log('start');
    // ec2インスタンス起動処理
    ec2Start(function() {
        context.done(null, 'Started Instance');
    });
};

停止スクリプト

// 停止するec2インスタンスのタグ設定
// この場合、キー名が「lambda:stop」、値が「default-first」
var targetInstanceParam = {
    Filters: [
        {
            Name: 'tag-key',
            Values: ['lambda:stop']// ec2インスタンスに設定するキー名
        },
        {
            Name: 'tag-value',
            Values: ['default-first']// ec2インスタンスに設定する値
        },
    ]
};

var AWS = require('aws-sdk');
AWS.config.region = 'ap-northeast-1'; // 各自の環境に合わせてリージョンを設定

function ec2Start(cb){
    var ec2 = new AWS.EC2();
    var targetInstanceIds = [];
    
    // 指定したタグが設定されているec2インスタンスを取得
    ec2.describeInstances(targetInstanceParam, function(err, data) {
        if (err) console.log(err, err.stack);
        else if(data.Reservations.length === 0) {
            console.log("don't find ec2");
        } else {
            // 取得できた場合、そのec2インスタンスのidを取得し停止
            for (var index in data.Reservations) {
                var instance = data.Reservations[index].Instances[0];
                console.log("instanceId = " + instance.InstanceId);
                targetInstanceIds.push(instance.InstanceId);
            }
            var params = {
                InstanceIds: targetInstanceIds
            };
        
            ec2.startInstances(params, function(err, data) {
                if (!!err) {
                    console.log(err, err.stack);
                } else {
                    console.log(data);
                    cb();
                }
            });
        }
    });
}
// 初めに実行する関数
exports.handler = function(event, context) {
    // ログ出力(不要であれば削除)
    console.log('start');
    // ec2インスタンス停止処理
    ec2Start(function() {
        context.done(null, 'Stoped Instance');
    });
};

【AWS】ec2:describe* 関連のAPIで権限エラー

awsのlambdaでec2.describeInstances()を使用しようとした時に、権限エラーで使えず・・・

原因

lambdaにec2:describeInstancesの権限をIAMで付与しなければならないのだが、その権限付与の仕方がダメでした。
Resourceに"*"を指定していたのが原因です。

awsでec2:describe* 関連のAPIを使用するときは、Resourceでの制限はサポートされていません。
マニュアルに書いてありました。。

Note
現在、Amazon EC2 ec2:Describe* API アクションは、リソースレベルのアクセス許可をサポートしていません。そのため、ユーザーがコンソールで表示できる個人のリソースを制御できません。したがって、上記のステートメントの Resource エレメントには、* (ワイルドカード)が必要です。どの Amazon EC2 API アクションでどの ARN を使用できるかについては、Amazon EC2 API アクションでサポートされるリソースレベルのアクセス許可 を参照してください。

http://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/iam-policies-ec2-console.html

月額1000円以内のクラウドサーバー比較

月額1000円以内で使用できるクラウドサーバーをCPU、メモリなどで比較しました。

クラウドサーバー比較表

サービス プラン CPU GHz メモリ(GB) 容量(GB) ネットワーク(GB) 料金(円) 備考
クラウド・エヌ vQ 1 0.4 0.5 15 無制限 450 使用した分だけで最大450円
GMOクラウド ALTUS
ミニサーバー 1 ? 0.5 20 無制限 500 月額固定
IDCFクラウド S1 1 0.8 1 15 3240 500 使用した分だけでサーバーは最大500円
ネットワークは超過分:10円/1GB"
エクスクラウド
VPS-1 12 ? 1 50 無制限 700 月額固定
CPUは共用12コア
12ヶ月まとめ払いで月額約642円"
ConoHa
1GB 2 ? 1 50 無制限 900 使用した分だけで最大900円

おまけ

VPS

サービス プラン CPU GHz メモリ(GB) 容量(GB) ネットワーク(GB) 料金(円) 備考
GMOクラウドVPS
1GB 2 ? 1 50 無制限 980 12ヶ月まとめ払いで月額780円