オーロラさんの勉強帳

IT企業勤務。データベース、Excel、Excel VBA、ネットワーク、LinuxなどIT関連のことを主に書いていきます。少しでもお役に立てたら幸いです。

【VMware】【エラー対応・解決方法】パワーオン中にエラーが発生しました: プロセスはファイルにアクセスできません。別のプロセスがファイルの一部をロックしています。

目次


自宅PCで勉強用に使っているVMware上のCentOS8がエラーで起動できない現象が発生したので、備忘録として記事にしようと思います。

エラーの内容

VMware上のCentOS8が以下のエラーで起動できない状態になりました。
パワーオンができず、別プロセスがファイルの一部をロックしている、というエラーメッセージの内容となっています。

f:id:auroralights:20210211180310p:plain

エラーメッセージ

パワーオン中にエラーが発生しました: プロセスはファイルにアクセスできません。
別のプロセスがファイルの一部をロックしています

ディスク「C:\Users\【ユーザ名】\Documents\Virtual Machines\CentOS 8 (64 ビット)\CentOS 8 (64 ビット).vmdk」、
またはこのディスクが依存するスナップショット ディスクを開くことができません。

モジュール Disk のパワーオンに失敗しました。

仮想マシンの起動に失敗しました。


エラーの原因

おそらくVMware上のCentOS8を起動中にPCの電源をオフしたことが原因だと推測しています。
または、エラーメッセージの通り何らかの処理を掴んだままパワーオフした、などの要因だと考えています。


エラーの対応・解決方法

エラーに書かれている以下のフォルダに移動して、ロックファイルが格納されているフォルダ(末尾が「.lck」のフォルダ)を削除すると解決します。

C:\Users\【ユーザ名】\Documents\Virtual Machines\CentOS 8 (64 ビット)

f:id:auroralights:20210211181915p:plain
今回の場合は、末尾に「.lck」が付く「CentOS8(64ビット).vmdk.lck」、「CentOS8(64ビット)-73f47be2.vmem.lck」の2つのフォルダを削除することで改善しました。

参考情報

削除した「CentOS8(64ビット).vmdk.lck」、「CentOS8(64ビット)-73f47be2.vmem.lck」の2フォルダには、拡張子「.lck」のロックファイルが格納されていました。
f:id:auroralights:20210211182601p:plain
f:id:auroralights:20210211182514p:plain


ロックファイルの中は以下のようにuuidなどの情報が記載されていました。
f:id:auroralights:20210211182729p:plain


その他の「パワーオン中にエラーが発生しました」エラーについて

「パワーオン中にエラーが発生しました」以降のメッセージが原因や解決方法を調べるヒントとなっています。
今回の場合は「別のプロセスがファイルの一部をロックしています」から、原因や解決策(ロックファイルの削除)を導きだしやすかったです。
ただし、「パワーオン中にエラーが発生しました」のエラーメッセージには他にもいろいろ種類があり、原因・解決方法が異なります。


今回の場合は当てはまりませんでしたが、
以下のように「VMware Authorization Service」を確認し、サービスが停止している場合は起動させる方法が
「パワーオン中にエラーが発生しました」エラーには有効なケースがあるようです。

VMware Authorization Serviceの確認
1.「Windows」キー+「R」キー
2.「services.msc」を入力し、「OK」
f:id:auroralights:20210211183853p:plain
3.サービスが停止している場合は、起動させる
f:id:auroralights:20210211183914p:plain
※今回のロックの場合は、サービスは起動しており、再起動しても改善はしませんでした。ロックファイルを削除することで改善しました。

【Excel VBA エキスパート ベーシック】Closeメソッド ブックを閉じる (VBA入門 36)

目次

Closeメソッド

Closeメソッドは指定したブックを閉じるメソッドです。
指定したブックの編集がすでに保存済みであればブックを閉じますが、編集が保存されていない場合は編集を保存するかどうか確認するメッセージが表示されます。


サンプルコード:Book.xlsxを閉じる

Sub sampleClose()
    Wporkbooks("Book1.xlsx").Close
End Sub


サンプルコード:アクティブなブックを閉じる

Sub sampleClose()
    ActiveWorkbook.Close
End Sub

編集が保存されていないブックをCloseメソッド閉じようとすると
以下の確認メッセージが表示されます。
f:id:auroralights:20210203230416p:plain



以下ではブックの変更を保存して閉じる場合と、ブックの変更を保存せずに閉じる場合のサンプルコードを紹介します。

変更を保存してブックを閉じたい場合

Save/SaveAsメソッドで保存後に閉じる方法

あらかじめSaveメソッドで上書き保存やSaveAsメソッドで別名保存した上でブックを閉じる方法です。


サンプルコード:アクティブなブックを上書き保存後、閉じます。

Sub sampleClose1()
    ActiveWorkbook.Save
    ActiveWorkbook.Close
End Sub


サンプルコード:アクティブなブックを「編集保存済」という名前で別名保存後に閉じます。

Sub sampleClose2()
    ActiveWorkbook.SaveAs Filename:="編集保存済"
    ActiveWorkbook.Close
End Sub


すでにカレントディレクトリに「編集保存済」というブックがある場合は、以下のようなメッセージが表示されます。
f:id:auroralights:20210203231648p:plain

Closeメソッドの引数「SaveChanges」に「True」を設定する方法

Closeメソッドの引数「SaveChanges」は変更を保存するかどうか「True」/「False」で指定することができます。
「SaveChanges」に「True」を指定することで、上書き保存してブックを閉じることができます。
※SaveChagesは省略することもできます。


サンプルコード:上書き保存してブックを閉じる

Sub sampleClose3()
    ActiveWorkbook.Close savechanges:=True
 'ActiveWorkbook.Close True savechangesを省略して書くこともできます。
End Sub

変更を保存せずにブックを閉じたい場合

Closeメソッドの引数「SaveChanges」に「False」を指定することで、変更を保存せずにブックを閉じることができます。


サンプルコード:編集を保存せずにブックを閉じる

Sub sampleClose4()
    ActiveWorkbook.Close savechanges:=False
 'ActiveWorkbook.Close False savechangesを省略して書くこともできます。
End Sub

【Linux】【入門】touchコマンドで新規ファイルを作成し、シェルスクリプトを実行する

目次

この記事の目的

touchコマンドで新規ファイルを作成し、viエディタでファイルにシェルスクリプトを記述し、シェルスクリプトを実行する。
各コマンドなどの詳細は省くが、一連の操作を実際に実施することで理解を深めることが目的です。

touchコマンドについて

touchコマンドはタイムスタンプを更新するコマンドです。
存在しないファイル名を指定することで、空の新規ファイルを作成することもできます。
※この記事ではtouchコマンドの詳細は省きます。


<タイムスタンプの更新(ファイルのアクセス時刻を現在に更新)>

touch [既存ファイル名]

<空の新規ファイルを作成>

touch [新規ファイル名]

touchコマンドで空の新規ファイルを作成する

pwdコマンドで現在のディレクトリ(カレントディレクトリ)の確認後、
ls -lでカレントディレクトリのファイル・ディレクトリを確認します。
f:id:auroralights:20210203012929p:plain


次にtouch hello.shで「hello.sh」というファイルを作成します。

touch hello.sh

f:id:auroralights:20210203013226p:plain
※lsコマンドで「hello.sh」が作成されていることを確認します。

作成したファイルをviエディタで編集する

vi hello.shでhello.shを編集します。

vi hello.sh

f:id:auroralights:20210203014805p:plain
画面がエディタに切り替わったら「i」キーを押下して、「入力モード」に切り替えます。
入力モードで以下のシェルスクリプトを入力します。

#!/bin/bash
echo "hello world."

入力が終わったら、「Esc」キーを押下し、「コマンドモード」に切り替え、「:wq」を入力し、「Enter」キーを押下します。
※「:wq」は保存してエディタを閉じます。
※viエディタの基本操作は今回は省きます。

ファイルの実行権限の確認

実行権限が無ければシェルスクリプトの実行ができません。
ls -lコマンドで実行権限の確認をします。

ls -l

f:id:auroralights:20210203015630p:plain
「-rw-rw-r--」となっています。
※権限の見方の詳細は省きますが、実行権限の「x」がありません。
以下のコマンドで実行権限を付与します。

chmod +x hello.sh

ls -lで「x」の実行権限が付与されたことが分かります。
f:id:auroralights:20210203020042p:plain


シェルスクリプトの実行

以下のように「./hello.sh」もしくは「sh hello.sh」、「bash hello.sh」と実行することで、hello world.が返ってくることが分かります。

./hello.sh
sh hello.sh
bash hello.sh

f:id:auroralights:20210203020629p:plain