CASコメントの後に不完全な疑似try-catchを持つ疑似コード
#!/usr/bin/env bash
# http://askubuntu.com/q/799834/25388
# Use: `sh myScript`; sudo does not work with Matlab.
#set -e # no rudimentary error checking
# https://stackoverflow.com/a/69808/54964
SWAP_FILE="/media/masi/SamiSwapVirtual/.swap_file_20.7.2016"
SIZE_MB="1000"
TO_RUN="matlab"
sudo dd if="/dev/zero" of="${SWAP_FILE}" bs="1M" count="${SIZE_MB}" status="progress"
sudo mkswap "${SWAP_FILE}"
sudo chmod 0600 "${SWAP_FILE}"
sudo chown root:root "${SWAP_FILE}" # http://unix.stackexchange.com/a/297153/16920
# TODO error-handling if any error, do swap
# Error-trapping here as here https://stackoverflow.com/a/185900/54964 ?
#
# My proposal where I am not sure about how to connect the commands inside the first block in braces
#
# https://stackoverflow.com/a/22010339/54964
{
sudo swapon -v "${SWAP_FILE}"
echo "Swap enabled. Press enter to continue"; read
"${TO_RUN}"
} || {
echo "I will remove the swap. Press enter to continue"; read
sudo swapoff -v "${SWAP_FILE}"
rm -vf "${SWAP_FILE}"
exit 1
}
echo "I will remove the swap. Press enter to continue"; read
sudo swapoff -v "${SWAP_FILE}"
rm -vf "${SWAP_FILE}"
出力
dd: failed to open '/media/masi/SamiSwapVirtual/.swap_file_20.7.2016': Permission denied
mkswap: cannot open /media/masi/SamiSwapVirtual/.swap_file_20.7.2016: Permission denied
chmod: changing permissions of '/media/masi/SamiSwapVirtual/.swap_file_20.7.2016': Operation not permitted
[sudo] password for masi:
開いている
dd
mkswap
ディスクの状態によって与えられる場合もあります。Permission denied
sudo
- 最初の中括弧内のコマンドを実行する前にパスワードを要求するにはどうすればよいですか?
システム:Linux Ubuntu 16.04 64ビットLinuxカーネル:4.6
ハードウェア:Macbook Air 2013-mid
関連トピック:BASHのエラー処理
答え1
MATLAB の実行は、スワップ領域管理とは全く別個です。それ以外の場合はそうです。スワップの作成と削除を別のスクリプトに分割し、コマンドラインまたはデフォルトの
sudo
matlab実行スクリプトで-を使用してスクリプトを実行する必要があります。変数を定義するときだけでなく、使用するときも変数を参照する必要があります。ちなみに、変数は変数などの補間なしで固定された文字列なので、定義するときに一重引用符を使用する必要があります。コマンドにも同様に適用されます。およびパラメータ
dd
にのみ二重引用符が必要です。他のものはまったく引用する必要はありませんが、引用することを選択した場合は、単一引用符がより適切です。of=
count=
変数またはパラメータ内に他の変数やコマンドの置換を含めるには二重引用符を使用し、固定文字列には一重引用符を使用します。ところで、日付の場合、YMDは正しくソートされます。 DMY番号
例えば
SWAPFILE="/$swappath/.swap_file_$(date +%Y%m%d)"
SWAP_FILE='/media/masi/SamiSwapVirtual/.swap_file_20.7.2016'
MATLABを実行しているため、スワップスペースを追加する必要はありません。それとも別のプログラムでも。たとえば、より多くのスワップスペースが必要な場合や必要な場合は、システムに一度だけ追加して
/etc/fstab
忘れてください。スワップパーティションが必要だと思うよりも少し大きくパーティションのサイズを変更できる場合は、そうします。それでも動作しない場合
/etc/fstab
。SSDと交換する場合は、
discard
再起動するたびにブロックが切り捨てられるようにこのオプションを使用する必要があります。例えば/dev/sda4 none swap defaults,discard 0 0
この
discard
オプションは間違いなくパーティションで機能します。スワップファイルでも動作するかどうかはわかりません。 (私の考えではそうだと思いますが、そう言う文書は見たことがありません。)ハードウェアが許可する場合、スワップスペースを追加するよりも優れたオプションは、システムにより多くのRAMをインストールすることです。他の記事でRAMをはんだ付けしてRAMのアップグレードを許可しないMacbook Airを使用していると述べました。
他のマシンでは、これが最善の選択です。 4つのDIMMスロットを備えたDDR3ベースのシステムは、簡単でかなり安価に32GBにアップグレードできます(4つの8GB DIMMはそれぞれ約50ドル)。 4つのDIMMスロットを備えたDDR4ベースのシステムは、64GB(それぞれ約100ドルに4つの16GBのDIMM)に簡単にアップグレードできます。
(.auで提供される製品の価格はおおよその価格(オーストラリアドルに基づく)であり、この記事を書く時点の最新価格です。)
16GB DDR3 DIMMのインストールは可能ですが、見つけるのは難しく、価格も高価です。 DDR4を購入するには、マザーボードとCPUのみをアップグレードするのが価値があるほど、価格差が大きくなります。
zram
RAMの一部を圧縮RAMブロックデバイスとして使用できます。たとえば、最大4 GBのRAMを使用するzramスワップデバイスの場合:モードプローブ zram num_devices=1 echo$((4 * 1024 * 1024 * 1024)) > /sys/block/zram0/disksize mkswap /dev/zram0 スワップ -p 100 /dev/zram0
zswap
スワップパーティションまたはスワップファイルもある場合は、このオプションを使用できますが、ZRAMスワップに格納されている内容とディスクにスワップされる内容の「インテリジェンス」がないため、このオプションを使用する方が合理的です。 ZRAMスワップスペースがいっぱいになると、後でスワップされたすべてのデータは、ZRAMが空き容量を再利用できるまでディスクに書き込まれます。スワップパーティションがすでに存在する場合は、
zswap
圧縮を使用して既存のスワップスペースに動的にサイズ変更されたRAMキャッシュを追加できます。使用する圧縮アルゴリズムと使用可能な最大RAMの割合を知ることができます。たとえば、エコ1> /sys/module/zswap/parameters/enabled echo lz4 > /sys/module/zswap/parameters/compressor エコ50> /sys/module/zswap/parameters/max_pool_percent
これにより、スワップアウトされたすべてのデータが圧縮され、最大RAMサイズに近づくとLRU(最近使用)に基づいてスワップパーティションの使用が開始され、最近使用したデータがスワップパーティションに残る可能性が高くなります。 。メモリ。
zram
そしてzswap
何年もメインラインカーネルにいました。zram
zswap
これは、RAMもアップグレードした場合に特に便利です。たとえば、私は最近、メインシステムを32 GB DDR3にアップグレードし、zswap
最大25%のRAMをスワップに使用できるように構成されたSSDスワップパーティションも使用しました。