|
1 | 1 | #!/bin/sh |
2 | 2 | # Credits go to: https://github.com/home-assistant/operating-system/ |
3 | | -set -e |
4 | | - |
5 | | -#### Options #### |
| 3 | +set -e # Exit on any command failure |
6 | 4 |
|
| 5 | +# Options |
7 | 6 | TYPE="" |
8 | | -MOUNT="" |
9 | | -DEVICE="" |
10 | 7 | SIZE=0 |
| 8 | +MOUNT="" |
11 | 9 |
|
12 | | -#### Parse arguments #### |
13 | | - |
14 | | -while [ "$1" != "" ]; do |
15 | | - key=$1 |
16 | | - case $key in |
17 | | - -t|--type) |
18 | | - TYPE=$2 |
19 | | - shift |
20 | | - ;; |
21 | | - -s|--size) |
22 | | - SIZE=$2 |
23 | | - shift |
24 | | - ;; |
25 | | - -m|--mount) |
26 | | - MOUNT=$2 |
27 | | - shift |
28 | | - ;; |
29 | | - *) |
30 | | - echo "[Error] $0 : Argument '$1' unknown" |
31 | | - exit 1 |
32 | | - ;; |
| 10 | +# Parse arguments |
| 11 | +while [ "$#" -gt 0 ]; do |
| 12 | + case "$1" in |
| 13 | + -t|--type) TYPE="$2"; shift 2 ;; |
| 14 | + -s|--size) SIZE="$2"; shift 2 ;; |
| 15 | + -m|--mount) MOUNT="$2"; shift 2 ;; |
| 16 | + *) echo "Error: Invalid argument '$1'"; exit 1 ;; |
33 | 17 | esac |
34 | | - shift |
35 | 18 | done |
36 | 19 |
|
37 | | -# Valide Type |
| 20 | +# Validate Type |
38 | 21 | if [ "$TYPE" != "swap" ] && [ "$TYPE" != "fs" ]; then |
39 | | - echo "[Error] Type unknown!" |
| 22 | + echo "Error: Type must be 'swap' or 'fs'" |
40 | 23 | exit 1 |
41 | 24 | fi |
42 | 25 |
|
43 | | -# Lookup device |
| 26 | +# Determine device based on type and mount |
| 27 | +DEVICE="/dev/zram" |
44 | 28 | if [ "$TYPE" = "swap" ]; then |
45 | | - DEVICE="/dev/zram0" |
| 29 | + DEVICE+="0" |
46 | 30 | elif [ "$MOUNT" = "var" ]; then |
47 | | - DEVICE="/dev/zram1" |
48 | | -#elif [ "$MOUNT" = "tmp" ]; then |
49 | | -# DEVICE="/dev/zram1" |
| 31 | + DEVICE+="1" |
50 | 32 | else |
51 | | - echo "[Error] No device for lookup!" |
| 33 | + echo "Error: No device for lookup!" |
52 | 34 | exit 1 |
53 | 35 | fi |
54 | 36 |
|
55 | | -# Calc 20% of memory for ZRAM swap partition |
56 | | -if [ "$TYPE" = "swap" ] && [ "$SIZE" -eq "0" ]; then |
57 | | - SIZE="$(awk '/MemTotal/{ print $2 * 0.20 }' /proc/meminfo)K" |
| 37 | +# Calculate 20% of memory for ZRAM swap partition if not specified |
| 38 | +if [ "$TYPE" = "swap" ] && [ "$SIZE" -eq 0 ]; then |
| 39 | + SIZE=$(awk '/MemTotal/{ print int($2 * 0.20) }' /proc/meminfo)K |
58 | 40 | fi |
59 | 41 |
|
60 | | -# Init device |
| 42 | +# Initialize ZRAM device |
61 | 43 | zramctl "$DEVICE" -s "$SIZE" -a lz4 |
62 | 44 |
|
63 | | -# Swap |
| 45 | +# Setup based on type |
64 | 46 | if [ "$TYPE" = "swap" ]; then |
65 | 47 | mkswap -L "ovos-zramswap" "$DEVICE" |
66 | | -fi |
67 | | - |
68 | | -# FileSystem |
69 | | -if [ "$TYPE" = "fs" ]; then |
| 48 | +elif [ "$TYPE" = "fs" ]; then |
70 | 49 | mkfs.ext4 -L "ovos-$MOUNT" -O ^has_journal "$DEVICE" |
71 | 50 | fi |
72 | 51 |
|
73 | | -# Copy persistent file structures into zram device |
| 52 | +# Handle var mount |
74 | 53 | if [ "$MOUNT" = "var" ]; then |
75 | | - # Check if this is a first run |
76 | | - if [ ! -d /mnt/data/var ]; then |
77 | | - mkdir -p /mnt/data/var |
78 | | - cp -af /var/* /mnt/data/var/ |
79 | | - fi |
80 | | - cp -af /mnt/data/var/* "$DEVICE" |
| 54 | + VAR_DIR="/mnt/data/var" |
| 55 | + [ ! -d "$VAR_DIR" ] && mkdir -p "$VAR_DIR" && cp -af /var/* "$VAR_DIR" |
| 56 | + cp -af "$VAR_DIR"/* "$DEVICE" |
81 | 57 | fi |
0 commit comments