Comment faire le piégeage d'erreur et Swapoff si erreur / avertissement?

Pseudocode où pseudo try-catch incomplet après le commentaire de cas

#!/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}" 

Sortie

 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: 

Ouvrir

  • dd et mkswap donne Permission denied parfois en fonction du disque donc sudo là.
  • Comment pouvez-vous le poser d'abord votre mot de passe avant d'exécuter des commands dans le premier bloc d'accolades?

Système: Linux Ubuntu 16.04 64 bits Noyau Linux: 4.6
Matériel: Macbook Air 2013-mid
Thread associé: Gestion des erreurs dans BASH

  1. Exécuter matlab est, ou devrait être, entièrement distinct de la gestion de l'espace de swap. Vous devez séparer les parties swap-creation / deletion en un script distinct, puis exécuter ce script avec sudo , que ce soit depuis la command line ou depuis votre script principal matlab.

    Vous devriez également citer vos variables lorsque vous les utilisez, pas seulement lorsque vous les définissez. BTW, puisque vos variables sont des strings fixes sans aucune variable etc interpolation, vous devriez utiliser des guillemets simples lors de leur définition. La même chose est vraie pour votre command dd – seuls les arguments of= et count= ont besoin de double-citation. Les autres n'ont pas besoin de citation, mais les guillemets simples sont plus appropriés si vous choisissez de les citer.

    Utilisez des guillemets doubles lorsque vous souhaitez intégrer d'autres variables ou substitution de command dans une variable ou un argument, des guillemets simples pour les strings fixes. BTW pour les dates, YMD sortinge correctement. DMY ne fait pas.

    par exemple

    SWAPFILE="/$swappath/.swap_file_$(date +%Y%m%d)" SWAP_FILE='/media/masi/SamiSwapVirtual/.swap_file_20.7.2016'

  2. Vous ne devriez pas avoir besoin d'append de l'espace d'échange simplement parce que vous utilisez matlab. Ou tout autre programme. Si vous avez besoin ou pourriez avoir besoin de plus d'espace de swap, ajoutez-le simplement au système, par exemple dans /etc/fstab et oubliez-le.

    Si vous pouvez resize vos partitions de manière à ce que la partition de swap soit légèrement plus grande que vous ne le pensez, alors faites-le. Sinon, ajoutez un file d'échange dans /etc/fstab .

    Si vous permutez sur un SSD, vous devez utiliser l'option de discard afin que les blocs soient ajustés à chaque redémarrage. par exemple

    /dev/sda4 none swap defaults,discard 0 0

    L'option de discard fonctionne certainement sur les partitions. Je ne suis pas sûr si cela fonctionne aussi sur les files d'échange (je pense que c'est le cas mais je n'ai pas vu de documentation qui le dit)

  3. Mieux encore que d'append de l'espace de swap est d'installer plus de RAM dans le système si le matériel le permet. Vous avez mentionné dans un autre post que vous utilisez un Macbook Air, qui a soudé sur la RAM, donc ne permet pas les mises à niveau de RAM.

    Pour les autres machines, c'est la meilleure option. Les systèmes à base de DDR3 dotés de 4 connecteurs DIMM peuvent être facilement et à peu de frais mis à niveau à 32 Go (modules DIMM 4x8GB à environ 50 $ chacun). Les systèmes basés sur DDR4 avec 4 sockets DIMM peuvent facilement être mis à niveau à 64 Go (DIMM 4x16GB à environ 100 $ chacun).

    (les prix sont approximatifs, en AUD, pour les produits disponibles en .au, et en cours au moment de la rédaction)

    Il est possible, mais plus difficile à find et plus coûteux, d'installer des modules DIMM DDR3 de 16 Go … la différence de prix est assez importante pour que la mise à niveau de la carte mère et du processeur pour get de la DDR4 soit sans doute utile.

  4. zram peut utiliser une partie de votre RAM en tant que périphérique de bloc de RAM compressé. Par exemple, pour un périphérique swap zram qui utilise jusqu'à 4 Go de RAM:

      modprobe zram num_devices = 1
     echo $ ((4 * 1024 * 1024 * 1024))> / sys / block / zram0 / disksize
     mkswap / dev / zram0
     swapon -p 100 / dev / zram0 

    Vous pouvez utiliser ceci si vous avez aussi une partition swap ou un file swap, mais il est plus logique d'utiliser zswap car il n'y a pas de "renseignement" sur ce qui est conservé dans le swap ZRAM et ce qui est échangé sur le disque. Lorsque la permutation ZRAM est remplie, toutes datatables permutées suivantes vont sur le disque jusqu'à ce qu'il y ait de nouveau de l'espace libre dans la ZRAM.

  5. Si vous avez déjà une partition de swap, vous pouvez utiliser zswap pour append un cache dynamic de redimensionnement dynamic avec compression à votre espace de swap existant. Vous pouvez lui indiquer l'algorithm de compression à utiliser et le pourcentage maximum de RAM qu'il est autorisé à utiliser. Par exemple:

      echo 1> / sys / module / zswap / parameters / enabled
     echo lz4> / sys / module / zswap / parameters / compresseur
     echo 50> / sys / module / zswap / parameters / max_pool_percent 

    Cela permet de compresser datatables échangées et, lorsque la taille de la memory RAM est proche, la partition de swap est utilisée sur la base LRU (Least-Recently-Used), de sorte que datatables les plus récemment utilisées sont plus susceptibles de restr dans RAM.

    zram et zswap ont été dans le kernel principal depuis plusieurs années maintenant.

    zram ou zswap peut être particulièrement utile si vous mettez à jour votre RAM. Par exemple, j'ai récemment mis à niveau mon système principal vers 32 Go de DDR3 et j'utilise également une partition de swap SSD avec zswap configuré pour permettre l'utilisation de 25% de RAM pour le swap.