Apple の脅威の通知と金銭目当てのスパイウェアへの対策について

しばらく返答が寄せられていないようです。 再度ディスカッションを開始するには、新たに質問してください。

スワップ領域が確保されない

Mac mini (Late 2014、Intel Core i5, 1.4GHz, メモリ4GB)において、外部ディスクにTranscend JetDrive 825(SSD)を接続しています。

外部ディスクにMac OS High Sierraをクリーンインストールして使用していますが、度々ハングアップします。

アクティビティモニタでメモリー使用量を見ると、4GBの物理メモリのうち使用済みメモリが3.5GBを越えると動作が鈍くなり、さらにメモリーが圧迫されるとハングアップする様に見えます。この時、使用済みメモリが増えてもスワップ使用領域が0バイトのままです。おそらく、スワップしないためにメモリーを使いきりハングアップしてしまうのではないかと思いますが、スワップ使用領域の確保の方法など分かりましたら、ご教示いただけないでしょうか。

内蔵のHDDから起動した場合はスワップが使われ、特にハングアップする事象は発生しません。

なお、SSDはAPFSフォーマットでマウントポイントは/、接続方法はThunderboltバスです。

Mac mini, macOS High Sierra (10.13.3)

投稿日 2018/03/21 20:03

返信
スレッドに付いたマーク ベストな回答

投稿日 2018/03/22 23:25

うちのmacbook airに外付けssdを繋ぎ、high sierra 10.13.3 をインストールして試してみました。

どうも外付けのシステムでapfsにすると、swapがマウントされないようです。なので、これはapfs上のhigh sierraのバグです。

なお、ググってみると、この症状はいろいろなところに報告されてます。米国のdiscussion boardにもあります。

High Sierra Freezing - RAM Swap not working |Official Apple Support Communities

この書き込みの中では、

sudo diskutil mount -mountPoint /private/var/vm disk2s4

でマウントされるとしてます。

SIPを外してやってみると確かにこれでマウントされます。


再起動すると、アンマウントの状態に戻ってしまうので、起動時毎回このコマンドを実行する必要があります。なお、SIPが有効の状態でもこのコマンドは実行できました。

返信: 23
スレッドに付いたマーク ベストな回答

2018/03/22 23:25 Redlions への返信

うちのmacbook airに外付けssdを繋ぎ、high sierra 10.13.3 をインストールして試してみました。

どうも外付けのシステムでapfsにすると、swapがマウントされないようです。なので、これはapfs上のhigh sierraのバグです。

なお、ググってみると、この症状はいろいろなところに報告されてます。米国のdiscussion boardにもあります。

High Sierra Freezing - RAM Swap not working |Official Apple Support Communities

この書き込みの中では、

sudo diskutil mount -mountPoint /private/var/vm disk2s4

でマウントされるとしてます。

SIPを外してやってみると確かにこれでマウントされます。


再起動すると、アンマウントの状態に戻ってしまうので、起動時毎回このコマンドを実行する必要があります。なお、SIPが有効の状態でもこのコマンドは実行できました。

2018/03/23 00:36 Redlions への返信

> こちらでhfs+でSSDをフォーマットして再インストールしたのですが、インストールされたドライブフォーマットはAPFS


おかしいですね。外付けにインストールするならhfs+のままになると思いますが。

ただ、high sierraインストーラーでapfsへの変換をしないようにしてインストールする方法が用意されてます。

Re: HighSierraをHFSにフォーマットしたい

のおしまいの方の私の書き込みを参照してください。インストーラをターミナルで実行し、その時にapfsへの変換をしないように指定します。

2018/03/22 00:20 Redlions への返信

apfsだとswap領域はcontainerの中に含まれます。

ターミナルで

$ diskutil list

/dev/disk0 (internal, physical):

#: TYPE NAME SIZE IDENTIFIER

0: GUID_partition_scheme *1.0 TB disk0

1: EFI EFI .... disk0s1

2: ....... ......... disk0s2

3: ...... ......... disk0s3

4: Apple_APFS Container disk1 314.4 GB disk0s4


/dev/disk1 (synthesized):

#: TYPE NAME SIZE IDENTIFIER

0: APFS Container Scheme - +314.4 GB disk1

Physical Store disk0s4

1: APFS Volume Macintosh HD 194.9 GB disk1s1

2: APFS Volume Preboot 18.4 MB disk1s2

3: APFS Volume Recovery 509.8 MB disk1s3

4: APFS Volume VM 2.1 GB disk1s4 <= swap領域


のようにになり、disk1s4がswapになります。

disk1s4がswapであることは、

$ diskutil info -all

とすると、問題のパーティションは、

Device Identifier: disk1s4
Device Node: /dev/disk1s4
Whole: No
Part of Whole: disk1


Volume Name: VM
Mounted: Yes
Mount Point: /private/var/vm


と表示されることから明らかです。


外付けだと、apfsにフィーマットしてやらないとapfsにはならないと思います。

まだ、apfsにはバグがあるのかも。外付けなら、hfs+にフォーマットしてhigh sierraをインストールすればhfs+のままになります。hfs+にされてみてはどうでしょうか。hfs+の場合には、swapは専用のファイルが作られます。

2018/03/22 00:19 はに への返信

はに様


情報ありがとうございます。

こちらで

diskutil info -allを実行しますと、外付けSDDの当該ボリュームは以下のようになりました。

VMはマウントされていないこと、ボリュームサイズが0でした。VMをマウントすれば良さそうですが、ディスクユーティリティーからはいじれそうはありませんでした。コマンドからは何かいけるのでしょうかね。


Device Identifier: disk2s4

Device Node: /dev/disk2s4

Whole: No

Part of Whole: disk2

Volume Name: VM

Mounted: No

Partition Type: 41504653-0000-11AA-AA11-00306543ECAC

File System Personality: APFS

Type (Bundle): apfs

Name (User Visible): APFS

Owners: Disabled

OS Can Be Installed: No

Booter Disk: disk2s2

Recovery Disk: disk2s3

Media Type: Generic

Protocol: SATA

SMART Status: Not Supported

Volume UUID: EED78940-78E8-41B6-909C-580C60120F68

Disk / Partition UUID: EED78940-78E8-41B6-909C-580C60120F68

Disk Size: 239.8 GB (239847653376 Bytes) (exactly 468452448 512-Byte-Units)

Device Block Size: 4096 Bytes

Volume Total Space: 0 B (0 Bytes) (exactly 0 512-Byte-Units)

Volume Available Space: 0 B (0 Bytes) (exactly 0 512-Byte-Units)

Read-Only Media: No

Read-Only Volume: Not applicable (not mounted)

Device Location: External

Removable Media: Fixed

Solid State: Yes

2018/03/22 00:44 Redlions への返信

diskutil mount -mountpoint /private/var/vm disk2s4

でマウントはいけると思います。 これでうまくマウントできるとしても、起動時毎回行う必要があると思います。

でも、マウントができないっておかしいですね。

マウントできなくても、/private/var/vmはあるはずで、そこにswapファイルができると思うのですが。ターミナルで、

ls -l /private/var/

とするとvmはありますか?

そもそもvmがないためにswapができないとか。

2018/03/22 01:20 はに への返信

もう修正できないので、新しくします。

マウントさせるターミナルのコマンドは、SIPが有効だとうまくできないかもしれませんので、SIPを無効にして行う必要があるかもしれません。また、diskutil としてますが、sudoをつけてやらないとできないかもしれません。

こんなのを毎回やるとなると大変です。特にSIPの解除が大変です。一旦解除したら、有効にできませんので(有効にすると、マウントコマンドが使えなくなる)、危険でもあります。VMがマウントされない理由をきちんと探るか、大人しくhfs+にしておく方が良いと思います。

2018/03/22 23:33 はに への返信

はに様


わざわざ状況を再現していただき大変ありがとうございました。

ご紹介いただいた方法でマウントするとスワップ領域が確保されました。

これは明らかなバグですね。Appleに報告を上げた方が良いのでしょうかね。


根本的な解決としてはhfs+でフォーマットして再インストールすることを推奨されております。

こちらでhfs+でSSDをフォーマットして再インストールしたのですが、インストールされたドライブフォーマットはAPFSになってしまいます。2回ほどトライしたのですが、同様でした。

SSDは自動的にAPFSになるようになっているのでしょうかね。こちらの操作ミスかもしれませんが。

2018/03/31 16:06 ni_ki への返信

ni_ki による書き込み:


それにしてもOS can be installed: no

これは正常な表示でしたね。

また、

ちなみに我が家ではThunderbolt 接続のSSD で正常に動き続けています。

負荷をかけて見たらハングして強制再起動しました。swap しないのが原因かは正確には不明ですが、クラッシュレポートにVM_pageout なんちゃらの文字がありますので原因ぽいですね。なお外付けSSD で起動しているMac 二台ともvm パーティションはマウントしていませんでした。スワップも0 のままです。

2018/03/31 17:09 はに への返信

sudo 付きで無事、swapfile が作成されました。ただしスワップすると時々、数十秒フリーズするようです。特に大量に確保したり切り離し時に起きる気配です。

なおマウントポイントはVM と大文字の方が良いかもしれません。内蔵APFS から起動するとVM でマウントしているので。

とりあえずスクリプトでログイン時にマウントさせるしかなさそうですね。


追記

SIP は外さずに試しました。


macOS High Sierra 10.13.3

2018/03/31 21:22 ni_ki への返信

thunderbolt接続だと内蔵扱いになるのですね。


> なおマウントポイントはVM と大文字の方が良いかもしれません


それは違うと思います。マウントポイントは/private/var/vm で小文字です。high sierraで設定される内蔵システムのものも全部こうなってます。ボリューム名はVMで大文字ですけど。

スクリプトでログイン時にマウントさせるには、ちょっと考えないといけないことがあります。disk2s4とかは外付けに何かつないでるとdisk番号が変わってしまう可能性があります。なので、スクリプトにするならUUIDで指定する方が良いと思います。また、本当は、誰がログインしようとswap がマウントされるようにしておくべきで、そのためには、起動時自動的に実行されるようにlaunchctlでマウントさせる方が良いと思います。ただ、これは、com.apple.dynamic_pager.plistの中身を書き換えるなどの記事がありますが、どうもうまくいってない感じです。

high sierra - Mac OS X is not creating a swap file - Ask Different


ま、もともと用意されてるスクリプトがうまく動作しなくて、少し書き換えてもうまくいかないとなると結構根が深い問題なのかもしれません。

2018/03/31 21:47 はに への返信

はに さんによる書き込み:


それは違うと思います。マウントポイントは/private/var/vm で小文字です。

マウント名で合わせた方が良いのでは。

スクリプトでログイン時にマウントさせるには、ちょっと考えないといけないことがあります。disk2s4とかは外付けに何かつないでるとdisk番号が変わってしまう可能性があります。

変わりますので事前にdiskxを取得して変えてマウントすれば良いかと。

ちらっと試しましたがシェルスクリプトならなんとかなりそうです。

2018/04/04 00:39 ni_ki への返信

失礼しました先の書き込み時に寝ぼけていたようです。重要な話を書きわしれました。

launched はルート下のLibrary フォルダの方に登録しています。ユーザフォルダの下の方なら成功します。ルート下だとroot 権限で実効されるようでパスワードが不要でいけると思うのですが、それが初回だけ成功します。

具体的にはexpect コマンドでsend \r です。管理者権限だとsend パスワード\r となrます。パスワードなしでsudo ができるというのも何か変ですが、とりあえず初回だけは動きます。

なおログイン時にシェルスクリプトを起動させる方法の際にログを確認するとroot で実行されたように記録されます。ログイン後、手動でスクリプトを走らせると管理者で記録されています。

ちょっと不思議です。

2018/04/05 11:14 Redlions への返信

諸々、試した結果launchd で失敗するのはタイミングの問題らしいことがわかりました。とりあえず下記でほぼ確実にマウントされます。

#!/bin/bash

sleep 30

diskutil mount -mountPoint /private/var/VM UUID


sleep がキモでした。「30」が正しいかどうかは状況によるようです。/Library/LaunchDaemons から起動しますのでsudo 不要です。UUID を使うのでdisk1s4 とかも変わっても問題ありません。

sleep コマンドがないとsudo launchctl list で読み込まれているのを確認できてもマウントを実行していなかったり、マウントしたログが残ってもマウントしていなかったりと不思議な動きをします。

またシェルスクリプト作成の能力が高いならsleep ではなくマウントしているかどうかを確認してマウントするまでdiskutil コマンドを呼び出し続けると言うのができる気がします。

なおexpect コマンドの方も遅延させればマウントするようです。これが成功したりしなかったりの正体だったようです。


追記

macOS High Sierra 10.13.3 and 10.13.4

2018/04/06 20:45 ni_ki への返信

ni_ki による書き込み:


マウントしているかどうかを確認してマウントするまでdiskutil コマンドを呼び出し続けると言うのができる気がします。

できました。予想以上にマウントが早いです。スクリプトを変えたら何故か2 秒後にはマウントしてくれます。

なお私はスクリプトに詳しくないので作成したものははずかしくて公開できません。

作成したのは

mount とgrep の両コマンドで文字列を抽出してマウントされているかどうかを確認するものです。

2018/04/08 20:48 Redlions への返信

#!/bin/bash -x



#set -eu



UUID=MyUUID

#mountpoint="t"

#tpoint="/private/var/vm"



sleep 17

diskutil mount -mountPoint /private/var/VM "$UUID"



sleep 11

diskutil mount -mountPoint /private/var/VM "$UUID"



sleep 7

diskutil mount -mountPoint /private/var/VM "$UUID"



#for n in $(seq 1 7)

#do

# if [ "$mountpoint" = "$tpoint" ] ; then

# echo $((n - 1)) >> /Users/Shared/n.txt

# exit 0

# else

# set +e

# diskutil mount -mountPoint /private/var/VM "$UUID"

# set -e



# sleep 2

# mountpoint=$(diskutil info "$UUID" | grep -o "$tpoint")

# echo ${mountpoint}" xx" >> /Users/Shared/n.txt

# fi

#done


しょっぱなのsleep しか大切でないです。

なんなのか、さっぱり。

スワップ領域が確保されない

Apple サポートコミュニティへようこそ
Apple ユーザ同士でお使いの製品について助け合うフォーラムです。Apple ID を使ってご参加ください。