zlmon (ZeroLab Monitor) — Мониторинг доступности серверов

Иногда стоит простая задача отслеживания доступности сервера в сети, но при этом разворачивать полноценные системы мониторинга может оказаться попросту нецелесообразно и долго.

Поэтому я написал небольшой shell-скрипт, решающий исключительно эту узкую задачу – zlmon (ZeroLab Monitor).

zlmon.sh:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#!/bin/bash

# --------------------------------------------
# zlmon (ZeroLab Monitor):
# Written by ZeroChaos
# Version 1.0, 2015-02-17
# Site: https://zerolab.net/
# --------------------------------------------

DIR=$(dirname "$0")
HOSTLIST=$DIR/hostlist.txt
SUBJECT="Alert: Host down!"
EMAIL="e@mail.net"

while read ADDRESS; do
    if [ ! -f /tmp/zlmon-$ADDRESS ]; then
        echo 0 > /tmp/zlmon-$ADDRESS
    fi
    COUNT=`head -1 /tmp/zlmon-$ADDRESS`
    if ping -c 1 -s 1 -W 1 $ADDRESS; then
        echo 0 > /tmp/zlmon-$ADDRESS
    else
        # Notify (no more than 5 times)
        if [ $COUNT -lt 5 ]; then
            echo -e "Connection Lost!\n\nHost: $ADDRESS\nTime: `date +'%Hh%Mm'`" | mail -s "$SUBJECT ($ADDRESS)" $EMAIL
        fi
        ((COUNT++))
        echo $COUNT > /tmp/zlmon-$ADDRESS
        # Clear counter
        if [ $COUNT -gt 60 ]; then
            echo 0 > /tmp/zlmon-$ADDRESS
        fi
    fi
done < $HOSTLIST

» Читать далее »

TP-Link TL-WR703N — Unbrick

wr703n-01

Заказал из Китая миниатюрный роутер TP-Link TL-WR703N. Доставки ждал совсем «недолго», всего каких-то 3 месяца, в очередной раз «спасибо» нашей почте. В конце концов роутер приехал. Эта модель рассчитана только на внутренний рынок Китая, поэтому кроме китайского интерфейса в веб-админке другого нет. Что ж, не беда, я изначально планировал поставить на эту железку прошивку OpenWrt, благо поддержка в OpenWrt Wiki заявлена.

Прочитал, как мне казалось, внимательно страничку в их Wiki, убедился (как оказалось — хреново), что версия моей прошивки 1.6, скачал последнюю со страницы Wiki ‘squashfs-factory.bin’ и прошил. Все прекрасно прошилось и казалось бы ничто не предвещало беды, однако, LAN-порт стал недоступен, а Wi-Fi в OpenWrt по умолчанию отключен. Прекрасно! Таким образом, в Failsafe mode я войти не мог, как не пытался.

Оказывается, прошивка на моем устройстве была версии 1.7 с новым U-boot, не смотря на то, что на наклейке сзади корпуса четко было указано — 1.6. Версию 1.7 поддерживает только прошивка из trunk’а, ее то и следовало сразу прошить. Ничего не остается, как разобрать роутер и подпаяться к serial.

wr703n-02

» Читать далее »

bind9 — автоматизация добавления файлов зон

adddomain-01

Наверняка многие из вас задумывались об автоматизации добавления новых файлов зон на своем DNS-сервере. Кто-то правит руками, кто-то ставит для этого развесистые панели управления, а кто-то просто автоматизирует скриптами рутинные операции, хотя бы по минимуму.

» Читать далее »

NFS mount on the OS X Mountain Lion and realtime encrypt files with EncFS

Уверен, что многие столкнулись с проблемой монтирования NFS (Network File System) из под OS X Mountain Lion. В этой версии Apple выпилила привычный инструмент монтирования через Disk Utility. Многие начали изобретать велосипеды или пользоваться чем-то вроде NFS Manager. Вот только все это ни к чему, достаточно внимательно почитать man и правильно настроить NFS Server. Пройдемся пошагово.

Для начала установим NFS Server на нашем *nix’овом сервере (в моем случае Debian):

1
apt-get install nfs-kernel-server nfs-common portmap

Правим ‘/etc/exports’ и прописываем монтируемые каталоги с правильными опциями:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# /etc/exports: the access control list for filesystems which may be exported
#       to NFS clients.  See exports(5).
#
# Example for NFSv2 and NFSv3:
# /srv/homes       hostname1(rw,sync,no_subtree_check) hostname2(ro,sync,no_subtree_check)
#
# Example for NFSv4:
# /srv/nfs4        gss/krb5i(rw,sync,fsid=0,crossmnt,no_subtree_check)
# /srv/nfs4/homes  gss/krb5i(rw,sync,no_subtree_check)
#

/hdd1/Downloads 192.168.1.0/255.255.255.0(rw,sync,no_subtree_check,all_squash,anonuid=1002,anongid=1002,insecure) 10.10.1.0/255.255.255.0(rw,sync,no_subtree_check,all_squash,anonuid=1002,anongid=1002,insecure)
/hdd1/webdav/itunes 192.168.1.0/255.255.255.0(rw,sync,no_subtree_check,all_squash,anonuid=33,anongid=33,insecure) 10.10.1.0/255.255.255.0(rw,sync,no_subtree_check,all_squash,anonuid=33,anongid=33,insecure)
/hdd1/webdav/efs 192.168.1.0/255.255.255.0(rw,sync,no_subtree_check,all_squash,anonuid=33,anongid=33,fsid=1,insecure)

Ключевой здесь является опция ‘insecure’, по сути, она избавляет от необходимости в опции ‘resvport’ на стороне клиента, которую раньше можно было выставить в Disk Utility. Опция ‘resvport’ применяется в случае, если NFS-сервер работает на привилегированном порту (ниже 1024), по умолчанию же, OS X пытается подключиться к NFS-серверу на непривилегированном порту, вот мы и повесим NFS на него, используя опцию ‘insecure’. Не забудьте исправить ‘anonuid’ и ‘anongid’ на uid и gid того пользователя и группы, из под которых хотите, чтобы велась запись. Обратите внимание на ‘fsid=1’, добавьте эту опцию для шары, в которой будет использоваться EncFS. Ну и не забудьте поменять разрешенные подсети на свои.

Перезапускаем сервис:

1
/etc/init.d/nfs-kernel-server restart

Чтобы посмотреть какие ресурсы предоставлены:

1
showmount -e

Если вы только добавляли ресурсы в файл ‘/etc/exports’, то их можно активировать без перезапуска службы NFS:

1
exportfs -a

Теперь перейдем к настройке EncFS, для упрощения я написал небольшой скрипт, подробно его прокомментировав, тем самым, не вижу смысла дублировать пояснения:

1
nano /usr/local/bin/efs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
#!/bin/sh

# ----------------------------------------------------------------------------
# Simple script for EncFS with NFS access
# Written by ZeroChaos
# Version 1.0, 2013-02-26
# Site: http://zerolab.net/
# ----------------------------------------------------------------------------
## Install EncFS:
# apt-get install encfs
## If we mount under another user (with option "--public" it's not necessary):
# adduser username fuse
## RTM!:
# man encfs
## Just replace the variables $EFS_FOLDER and $MOUNT_POINT, and then run:
# efs -m
## For unmount:
# efs -u
## For force unmount:
# efs -f
# ----------------------------------------------------------------------------

# Are you using NFS for access to decrypted folder?
NFS_ACCESS="yes"

# Variables for encfs command
EFS_FOLDER="/hdd1/efs"
MOUNT_POINT="/hdd1/webdav/efs"
OPTIONS="--public"
#OPTIONS="--public --idle=60"
MNT_CMD="encfs $OPTIONS $EFS_FOLDER $MOUNT_POINT"
# If we mount under another user
#RUNAS="username"
#MNT_CMD="su - $RUNAS -c "encfs $EFS_FOLDER $MOUNT_POINT""

# Mount
mount() {
    $MNT_CMD
}

# Unmount
umount() {
    if [ $NFS_ACCESS = "yes" ]; then
        /etc/init.d/nfs-kernel-server stop >/dev/null 2>&1
        sleep 1
    fi
    fusermount -u $MOUNT_POINT
    if [ $NFS_ACCESS = "yes" ]; then
        sleep 1
        /etc/init.d/nfs-kernel-server start >/dev/null 2>&1
    fi
}

# Force unmount
force_umount() {
    ps ax | grep [e]ncfs | awk '{ print $1 }' | xargs kill >/dev/null 2>&1
    if [ $NFS_ACCESS = "yes" ]; then
        /etc/init.d/nfs-kernel-server restart >/dev/null 2>&1
    fi
}

ME=$(basename "$0")
print_help() {
    echo
    echo "Usage: $ME [OPTION...]"
    echo
    echo "Options:"
    echo "         -m     Mount:"
    echo "                efs -m"
    echo "         -u     Unmount:"
    echo "                efs -u"
    echo "         -f     Force unmount:"
    echo "                efs -f"
    echo "         -h     Help."
    echo
}

while getopts ":mufh" opt;
do
    case $opt in
        m) mount;
            ;;
        u) umount;
            ;;
        f) force_umount;
            ;;
        h) print_help;
            ;;
        *) echo "Wrong option";
            exit 1
            ;;
        esac
done
1
chmod 755 /usr/local/bin/efs

Вот и все, теперь монтируем шару через Finder (CMD+K):

» Читать далее »

ZLU (ZeroLab Unisync): remote & local automated backup script

Появилось немного времени и я решил переписать скрипт для автоматизации задачи бэкапа данных. Раньше скрипт неизбежно приходилось дублировать, если каталоги назначения различались, для локального же бэкапа приходилось немного модифицировать сценарий. Теперь этого делать не нужно, один универсальный скрипт способен проделать несложные операции за вас, нужно лишь задать необходимые параметры в файле настроек.

Итак, ZLU (ZeroLab Unisync):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
#!/bin/sh

# --------------------------------------------
# ZLU (ZeroLab Unisync):
# remote & local automated backup script
# Written by ZeroChaos
# Version 1.5, 2012-11-20
# Site: http://zerolab.net/
# --------------------------------------------
# NOTE: Exclude spaces in the variable FOLDER!
# --------------------------------------------

# -------------------------------------------- begin of [Configurable settings]
# Use SSH for remote sync
export RSYNC_RSH="ssh -c arcfour -o Compression=no -x"

# Snapshot directory
SDIR="snapshot"
SNAPSHOT_dir="$SDIR/`date +'%Y-%m-%d.%Hh%Mm'`"

# Take the list from the same folder where the script is called
DIR=$(dirname "$0")
LISTFOLDERS="$DIR/backup.txt"
EXCLUSIONSDIR="$DIR"
# -------------------------------------------- end of [Configurable settings]

# -------------------------------------------- begin of [Do not touch this section]
# If no arguments
if [ $# = 0 ]; then
    SNAPSHOT_GLOBAL="disable"
    i=0
    while read LINE; do
        if [ -n "$LINE" ]; then
            IFS=";"
            set -- $LINE
            FOLDER="$1"
            DEST_point="$2"
            LISTEXCLUSIONS="$EXCLUSIONSDIR/$3"
            SNAPSHOT="$4"
            SDAYS="$5"
            REMOTEHOST="${6}@${7}"
            FOLDERNAME="`echo "$FOLDER" | awk -F/ '{ print $NF }'`"
            # Options for rsync + array of commands to autorotation
            if [ $SNAPSHOT = "enable" ]; then
                SNAPSHOT_GLOBAL="enable"
                if [ "$6" != "" ] && [ "$7" != "" ]; then
                    OPTIONS="-Sazq --bwlimit=3840 --delete --exclude-from=$LISTEXCLUSIONS --backup --backup-dir=${DEST_point}${SNAPSHOT_dir}/$FOLDERNAME"
                    SAR[$i]="ssh $REMOTEHOST "find ${DEST_point}${SDIR}/ -type d -mtime +$SDAYS -exec rm -r {} \;" >/dev/null 2>&1"
                    i=$(($i+1))
                else
                    OPTIONS="-Saq --delete --exclude-from=$LISTEXCLUSIONS --backup --backup-dir=${DEST_point}${SNAPSHOT_dir}/$FOLDERNAME"
                    SAR[$i]="find "${DEST_point}${SDIR}/" -type d -mtime +$SDAYS -exec rm -r {} \; >/dev/null 2>&1"
                    i=$(($i+1))
                fi
            else
                if [ "$6" != "" ] && [ "$7" != "" ]; then
                    OPTIONS="-Sazq --bwlimit=3840 --delete --exclude-from=$LISTEXCLUSIONS"
                else
                    OPTIONS="-Saq --delete --exclude-from=$LISTEXCLUSIONS"
                fi
            fi
            # Sync
            if [ "$6" != "" ] && [ "$7" != "" ]; then
                eval rsync $OPTIONS "${FOLDER}/" $REMOTEHOST:"${DEST_point}${FOLDERNAME}/"
            else
                eval rsync $OPTIONS "${FOLDER}/" "${DEST_point}${FOLDERNAME}/"
            fi
        fi
    done < $LISTFOLDERS
    # Snapshot auto-rotate
    if [ $SNAPSHOT_GLOBAL = "enable" ]; then
        for ((a=0; a<${#SAR[*]}; a++)); do
            eval "${SAR[$a]}"
        done
    fi
fi

# Generate public/private rsa key pair
ssh_keygen() {
    ssh-keygen -t rsa -b 4096
}

# Copy your public key on a remote machine
ssh_copy_id() {
    # Function for remote host choice
    PS3='Select the remote host: '
    rhchoice() {
        eval set $RHARR
        select RH; {
            REMOTEHOST=$RH
            break
        }
    }

    # Read the list of remote hosts
    while read LINE; do
        IFS=";"
        set -- $LINE
        if [ "$6" != "" ] && [ "$7" != "" ]; then
            RH="${6}@${7}"
            RHARR="$RHARR $RH"
        fi
    done < $LISTFOLDERS

    # Remote host choice
    if [ "$RHARR" != "" ]; then
        rhchoice $RHARR
    else
        echo "No remote hosts, please configure the settings file: $LISTFOLDERS"
    fi

    ID_FILE="${HOME}/.ssh/id_rsa.pub"

    if [ x$SSH_AUTH_SOCK != x ] && ssh-add -L >/dev/null 2>&1; then
        GET_ID="$GET_ID ssh-add -L"
    fi

    if [ -z "`eval $GET_ID`" ] && [ -r "${ID_FILE}" ]; then
        GET_ID="cat ${ID_FILE}"
    fi

    if [ -z "`eval $GET_ID`" ]; then
        echo "$0: ERROR: No identities found" >&2
        exit 1
    fi

    if [ "$RHARR" != "" ]; then
        { eval "$GET_ID" ; } | ssh ${REMOTEHOST%:} "umask 077; test -d .ssh || mkdir .ssh ; cat >> .ssh/authorized_keys" || exit 1
    fi
}

ME=$(basename "$0")
print_help() {
    echo
    echo "Usage: $ME [OPTION...]"
    echo
    echo "Options:"
    echo "         -g     Generate public/private rsa key pair:"
    echo "                ssh-keygen -t rsa -b 4096"
    echo "         -c     Copy your public key on a remote machine:"
    echo "                ssh-copy-id user@host"
    echo "         -h     Help."
    echo
    echo "Example: $ME -gc"
    echo "Use both options, generate & copy."
    echo
}

while getopts ":gch" opt;
do
    case $opt in
        g) ssh_keygen;
            ;;
        c) ssh_copy_id;
            ;;
        h) print_help;
            ;;
        *) echo "Wrong option";
            echo "For help, use: $ME -h";
            exit 1
            ;;
        esac
done
# -------------------------------------------- end of [Do not touch this section]

» Читать далее »

RDP & RDP over SSH automatic connection script

При обслуживании парка машин под управлением операционной системы Windows, немаловажным является возможность быстрого и максимально простого подключения к удаленному рабочему столу. Нередка ситуация, когда подключаться нужно не только с рабочего места, но и находясь удаленно за многие километры от него. Желательно, чтобы местоположение определялось автоматически и, в зависимости от этого, применялись индивидуальные настройки. Для упрощения этой процедуры, был написан небольшой скрипт.

Подключение к удаленному рабочему столу сводится к простому вводу ‘./rdp username’. Имя пользователя можно вводить в любом регистре, пароль и хост удаленной машины автоматически подставляются из простого текстового файла. Скрипт работает из под Mac OS X (OS X) и из под Linux. Для OS X должен быть установлен X Window System (X11). Интерфейс сетевого подключения и внутренний IP адрес так же автоматически определяются в зависимости от операционной системы.

Для примера, подключение к серверу:

1
./rdp root

Процедура подключения:

» Читать далее »

HP ProLiant MicroServer N40L with Supermicro AOC-SG-i2 Dual Gigabit i82575EB

Привезли наконец-то двухпортовую серверную сетевую карту Supermicro AOC-SG-i2 Dual Gigabit i82575EB. Поставил, заодно и конвертер 5.25″ ODD Bay to 3.5″ HDD Bay прикрутил. Улучшить конфигурацию можно, разве что, поставив Remote Access Card (KVM-over-IP). Ну, либо дискретную видяху, один свободный слот остался lipitor medication. Только кому она на сервере нужна? Нужды в HTPC при наличии Popcorn Hour особо нет, к тому же видеокарту мощностью больше 25 Вт не поставить. Да и без Remote Access Card обойдусь, наверное. Что бы еще прикрутить?

» Читать далее »

rsync — Automated backup script (with snapshots)

Решил немного упростить задачу резервного копирования при помощи rsync и написал для этого небольшой скрипт на bash. Да, знаю, уже есть несколько решений, упрощающих backup при помощи rsync, но для того, чтобы выполнить требуемую задачу, все равно пришлось бы писать для этого свою обвязку. Потому было принято решение написать что-то свое, максимально упрощающее задачу бэкапа и сопутствующих этому действий, таких как генерация ключа для авторизации по ssh, а так же его копирование на backup-сервер.

Следующий скрипт позволяет читать список копирумых каталогов из текстового файла, применять маску исключений, задаваемую в текстовом файле, а так же опционально делать snapshot’ы, содержащие измененные, либо удаленные файлы. Тем самым, появляется возможность откатиться на старые версии файлов, случайно удаленных, к примеру, либо ошибочно измененных. При этом сохраняется полная изначальная структура каталогов, что позволяет легко найти требуемый файл. Snapshot’ы хранятся в каталогах со следующей маской в имени: ‘год-месяц-день.XXчXXм’. Есть возможность авторотации snapshot’ов.

backup.sh:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
#!/bin/sh

# ———————————————
# Automated backup script
# Written by ZeroChaos
# Version 1.1, 2012-01-14
# Site: http://zerolab.net/
# ———————————————
# NOTE: Exclude spaces in the variable FOLDER!
# ———————————————
# set -e

# ——————————————— begin of [Configurable settings]
# Use SSH for sync
export RSYNC_RSH="ssh -c arcfour -o Compression=no -x"

# Remote account
USER="zerochaos"
HOST="zerolab.net"
REMOTEHOST="${USER}@${HOST}"

# Enable or disable snapshot
SNAPSHOT="true"
# Auto-rotate (days)
SDAYS="15"

# Destination folder, snapshot directory
DEST_point="/home/zerochaos/www/"
SDIR="snapshot"
SNAPSHOT_dir="${DEST_point}${SDIR}/`date +’%Y-%m-%d.%Hh%Mm’`"

# Take the list from the same folder where the script is called
DIR=$(dirname "$0")
LISTFOLDERS=$DIR/backup.txt
LISTEXCLUDES=$DIR/exclude.txt
STRDEL="# begin of [do not delete this string]"
# ——————————————— end of [Configurable settings]

# ——————————————— begin of [Do not touch this section]
# If no arguments
if [ $# = 0 ]; then
    while read FOLDER; do
        if [ -n "$FOLDER" ] && [ "$FOLDER" != "$STRDEL" ]; then
            FOLDERNAME="`echo "$FOLDER" | awk -F/ ‘{ print $NF }’`"
            # Options for rsync
            if [ $SNAPSHOT = "true" ]; then
                OPTIONS="-Sazq —bwlimit=3840 —delete —exclude-from=$LISTEXCLUDES —backup —backup-dir=$SNAPSHOT_dir/$FOLDERNAME"
            else
                OPTIONS="-Sazq —bwlimit=3840 —delete —exclude-from=$LISTEXCLUDES"
            fi
            # Sync
            rsync $OPTIONS "${FOLDER}/" $REMOTEHOST:"${DEST_point}${FOLDERNAME}/"
        fi
    done < $LISTFOLDERS
    # Snapshot auto-rotate
    if [ $SNAPSHOT = "true" ]; then
        ssh $REMOTEHOST "find ${DEST_point}${SDIR}/ -type d -mtime +$SDAYS -exec rm -r {} \;" >/dev/null 2>&1
    fi
fi

# Generate public/private rsa key pair
ssh_keygen() {
    ssh-keygen -t rsa -b 4096
}

# Copy your public key on a remote machine
ssh_copy_id() {
    ID_FILE="${HOME}/.ssh/id_rsa.pub"

    if [ x$SSH_AUTH_SOCK != x ] && ssh-add -L >/dev/null 2>&1; then
      GET_ID="$GET_ID ssh-add -L"
    fi

    if [ -z "`eval $GET_ID`" ] && [ -r "${ID_FILE}" ]; then
      GET_ID="cat ${ID_FILE}"
    fi

    if [ -z "`eval $GET_ID`" ]; then
      echo "$0: ERROR: No identities found" >&2
      exit 1
    fi

    { eval "$GET_ID" ; } | ssh ${REMOTEHOST%:} "umask 077; test -d .ssh || mkdir .ssh ; cat >> .ssh/authorized_keys" || exit 1
}

ME=$(basename "$0")
print_help() {
    echo
    echo "Usage: $ME [OPTION…]"
    echo
    echo "Options:"
    echo "         -g     Generate public/private rsa key pair:"
    echo "                ssh-keygen -t rsa -b 4096"
    echo "         -c     Copy your public key on a remote machine:"
    echo "                ssh-copy-id $REMOTEHOST"
    echo "         -h     Help."
    echo
    echo "Example: $ME -gc"
    echo "Use both options, generate & copy."
    echo
}

while getopts ":gch" opt;
do
    case $opt in
        g) ssh_keygen;
            ;;
        c) ssh_copy_id;
            ;;
        h) print_help;
            ;;
        *) echo "Wrong option";
            echo "For help, use: $ME -h";
            exit 1
            ;;
        esac
done
# ——————————————— end of [Do not touch this section]

» Читать далее »

HP ProLiant MicroServer N40L with 8GB Memory

Вот она! Домашняя серверная, ужатая до минимума. Наконец-то нормальная лаба с гипервизором на борту. HP ProLiant MicroServer N40L. 8ГБ оперативы, 4 корзины под HDD + 1, полученная с помощью конвертера 5.25″ ODD Bay to 3.5″ HDD Bay. Поддерживаются диски до 4ТБ, в теории можно собрать хранилище на 20ТБ (+ еще на eSata можно один повесить, получится 24ТБ o_O). Но, думаю, ограничусь 5×3ТБ, когда диски подешевеют, а случится это, похоже, не скоро, долго еще спекулировать будут.

» Читать далее »

Nook Touch — System backup on the OS X

nook_touch_backup

1. Скачайте noogie.img

2. Введите в терминале:

1
diskutil list

И ищите свою карту памяти.

3. Размонтируйте карту памяти:

1
diskutil unmountDisk /dev/disk#

Где # — номер устройства, не используйте при размонтировании disk#s# (где s — slice). После чего будет сообщение об успешном размонтировании всех томов карты памяти.

4. Разворачиваем образ на карту памяти:

1
sudo dd if=noogie.img of=/dev/rdisk# bs=1m

5. Загрузите свой NOOK Touch со вставленной только что приготовленной картой памяти. Подключите Nook по USB к компьютеру.

6. Введите в терминале:

1
diskutil list

И ищите карту памяти Nook.

7. Размонтируйте карту памяти:

1
diskutil unmountDisk /dev/disk#

8. Снимите образ:

1
2
cd ~/Desktop
sudo dd if=/dev/rdisk# of=nook_touch_backup.img bs=1m

Где # — запомненный ранее номер устройства.

После чего получите образ с именем nook_touch_backup.img на своем рабочем столе. Удостоверьтесь, что размер образа получился 1958739968 байт (для NST, для NSTwGL — 2000683008).

Для восстановления из образа:

1
sudo dd if=nook_touch_backup.img of=/dev/rdisk# bs=1m

Twitter

MSI Lab Twitter
Яндекс.Деньги:

VISA/MasterCard:

PayPal:
PayPal USD
PayPal RUB
WMZ WMZ: Z375880088307
WMR WMR: R883546545943
YAD YAD: 4100170884493

Donate - лучшее спасибо автору
Количество благодарностей: 28

Разделы

Последние комментарии