오류/경고가 발생한 경우 오류 트래핑 및 교체를 어떻게 수행합니까?

오류/경고가 발생한 경우 오류 트래핑 및 교체를 어떻게 수행합니까?

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: 

열려 있는

  • ddmkswap디스크 상태에 따라 주어지는 경우도 있습니다 .Permission deniedsudo
  • 첫 번째 중괄호 안의 명령을 실행하기 전에 비밀번호를 묻도록 하려면 어떻게 해야 합니까?

시스템: Linux Ubuntu 16.04 64비트 Linux 커널: 4.6
하드웨어: Macbook Air 2013-mid
관련 주제:BASH의 오류 처리

답변1

  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'

  2. MATLAB을 실행하고 있다는 이유만으로 스왑 공간을 추가할 필요는 없습니다. 아니면 다른 프로그램이라도요. 예를 들어 더 많은 스왑 공간이 필요하거나 필요할 수 있는 경우 시스템에 한 번만 추가하고 /etc/fstab잊어버리십시오.

    스왑 파티션이 필요하다고 생각하는 것보다 약간 더 크게 파티션 크기를 조정할 수 있다면 그렇게 하십시오. 그래도 작동하지 않으면 /etc/fstab.

    SSD로 교체하는 경우 discard재부팅할 때마다 블록이 잘리도록 이 옵션을 사용해야 합니다. 예를 들어

    /dev/sda4 none swap defaults,discard 0 0

    discard옵션은 확실히 파티션에서 작동합니다. 스왑 파일에서도 작동하는지 확실하지 않습니다. (제 생각에는 그렇다고 생각하지만 그렇게 말하는 문서는 본 적이 없습니다.)

  3. 하드웨어가 허용하는 경우 스왑 공간을 추가하는 것보다 더 나은 옵션은 시스템에 더 많은 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만 업그레이드하는 것이 가치가 있을 만큼 가격 차이가 큽니다.

  4. zramRAM의 일부를 압축된 RAM 블록 장치로 사용할 수 있습니다. 예를 들어, 최대 4GB 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에서 여유 공간을 다시 사용할 수 있을 때까지 디스크에 기록됩니다.

  5. 스왑 파티션이 이미 있는 경우 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몇 년 동안 메인라인 커널에 있었습니다.

    zramzswap이는 RAM도 업그레이드한 경우 특히 유용할 수 있습니다. 예를 들어, 저는 최근에 메인 시스템을 32GB DDR3으로 업그레이드하고 zswap최대 25%의 RAM을 스왑에 사용할 수 있도록 구성된 SSD 스왑 파티션도 사용했습니다.

관련 정보