URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID3
Нить номер: 107573
[ Назад ]

Исходное сообщение
"Ошибка в bash-скрипте привела к полной очистке всех серверов..."

Отправлено opennews , 14-Апр-16 21:15 
Опубликована (http://www.independent.co.uk/life-style/gadgets-and-tech/new...) поучительная история, призывающая к осторожному использованию систем централизованного управления конфигурацией и жесткой изоляции резервных копий. Для автоматизации проведения работ на всех серверах одного хостинг-провайдера использовалась система Ansible. В один прекрасный момент в bash-скрипте, содержащем команду "rm -rf {foo}/{bar}" ("rm -rf ${foo}/${bar}/*" ?) была допущена ошибка, которая привела к незаполнению переменных foo и bar. После того как скрипт был растиражирован и выполнен на всех серверах произошла (http://serverfault.com/questions/769357/recovering-from-a-rm-rf) катастрофа - было удалено содержимое всех серверов, включая бэкапы, хранилище которых было примонтировано к одному из серверов, и данные сайтов 1535 клиентов.


URL: http://www.independent.co.uk/life-style/gadgets-and-tech/new...
Новость: http://www.opennet.me/opennews/art.shtml?num=44247


Содержание

Сообщения в этом обсуждении
"Ошибка в bash-скрипте привела к полной очистке всех серверов..."
Отправлено Аноним , 14-Апр-16 21:15 
Вот костыления достойные плоды !

"Ошибка в bash-скрипте привела к полной очистке всех серверов..."
Отправлено grec , 14-Апр-16 21:16 
На всяких sh кодить дело не благодарное.

"Ошибка в bash-скрипте привела к полной очистке всех серверов..."
Отправлено Andrey Mitrofanov , 15-Апр-16 09:31 
> На всяких sh кодить дело не благодарное.

Ога-ога. Зато теперь bash.exe точно готов для майкрософта-виста!


"Ошибка в bash-скрипте привела к полной очистке всех серверов..."
Отправлено Аноним , 14-Апр-16 21:16 
lol

"Ошибка в bash-скрипте привела к полной очистке всех серверов..."
Отправлено A.Stahl , 14-Апр-16 21:18 
>foo и bar

И потом админы вздохнули: "foo" и пошли в bar заливать горе...


"Ошибка в bash-скрипте привела к полной очистке всех серверов..."
Отправлено Аноним , 14-Апр-16 21:19 
Вот вам и мнимая простота Ansible.

"Ошибка в bash-скрипте привела к полной очистке всех серверов..."
Отправлено о6какатрон , 14-Апр-16 21:30 
человечиский фактор жэ

"Ошибка в bash-скрипте привела к полной очистке всех серверов..."
Отправлено Поуист , 15-Апр-16 05:52 
Тут скорее поработали специально обученные обезьяны.

"Ошибка в bash-скрипте привела к полной очистке всех серверов..."
Отправлено Аноним , 16-Апр-16 10:13 
Ты придурок? Если нет, то объясни, почему так мало фигурных скобок и кто использует "shell: rm" и "file: state=absent".

"Ошибка в bash-скрипте привела к полной очистке всех серверов..."
Отправлено Anonplus , 14-Апр-16 21:36 
Если пользователь хочет выстрелить себе в ногу, программа должна это позволять. Но она должна уметь и отменять любое действие. Иначе, это просчёт программистов.

"Ошибка в bash-скрипте привела к полной очистке всех серверов..."
Отправлено РРР , 14-Апр-16 21:58 
Продолжим ваши рассуждения о выстреле. Пользователь спустил курок, пуля пролетела сквозь череп. Каким образом господин Калашников должен вас восстановить из мёртвых?

"Ошибка в bash-скрипте привела к полной очистке всех серверов..."
Отправлено Аноним , 14-Апр-16 22:29 
Подать в суд на Калашникова, очевидно же.

"Ошибка в bash-скрипте привела к полной очистке всех серверов..."
Отправлено . , 15-Апр-16 02:13 
В суд на человека с калашниковым :)
"Я делал автомат чтобы Родину защищать!"(С)Калашников, а если всяким еб***нам захотелось себе череп прострелить, ни автомат ни Конструктор ни при чём.

"Ошибка в bash-скрипте привела к полной очистке всех серверов..."
Отправлено 8203 , 15-Апр-16 04:10 
Не хватает только DRM.

"Ошибка в bash-скрипте привела к полной очистке всех серверов..."
Отправлено tagezi , 14-Апр-16 21:37 
Причем тут костыли, причем тут простата? :D
Просто нужно тестить свой говнокод, перед тем как юзать :)))

"Ошибка в bash-скрипте привела к полной очистке всех серверов..."
Отправлено Васёк , 14-Апр-16 22:35 
Вот простáта тут однозначно не причем…

"Ошибка в bash-скрипте привела к полной очистке всех серверов..."
Отправлено foobar , 14-Апр-16 23:56 
Так он и протестил, в проде...

"Ошибка в bash-скрипте привела к полной очистке всех серверов..."
Отправлено _KUL , 15-Апр-16 06:55 
Они забыли в команде указать последним главный ключ из man'а!

-i, --interactive
Выдавать запрос на удаление каждого файла. Если ответ не утвердителен, то файл пропускается.


"Ошибка в bash-скрипте привела к полной очистке всех серверов..."
Отправлено Аноним , 14-Апр-16 21:39 
Во всём нужно искать положительные стороны. Например, рассадников червей и спамоботов стало на полторы тыщи меньше.

"Ошибка в bash-скрипте привела к полной очистке всех серверов..."
Отправлено Аноним , 14-Апр-16 21:40 
хм. --no-preserve-root?

"Ошибка в bash-скрипте привела к полной очистке всех серверов..."
Отправлено Аноним , 14-Апр-16 21:42 
Все уже разобрались, что это троллинг.

"Ошибка в bash-скрипте привела к полной очистке всех серверов..."
Отправлено Аноним , 14-Апр-16 21:59 
Почтим памятью безвременно ушедшего раба божия того админа...

"Ошибка в bash-скрипте привела к полной очистке всех серверов..."
Отправлено Аноним , 14-Апр-16 21:59 
Патч имени Бармина накатили

"Ошибка в bash-скрипте привела к полной очистке всех серверов..."
Отправлено Аноним , 14-Апр-16 22:00 
Какой-то хипстер обжегся и решил запилить прохладную историю про якобы хостинг-провайдера. Знаем, проходили. Очередное напоминание, мол, "аккуратнее, ребзя! линух, оказывается, кусается!"

"Ошибка в bash-скрипте привела к полной очистке всех серверов..."
Отправлено Аноним , 14-Апр-16 22:05 
Ansible - мощь!

"Ошибка в bash-скрипте привела к полной очистке всех серверов..."
Отправлено Пользователь Debian , 14-Апр-16 22:07 
Удалите эту ерунду.  Человек на SO набросил потому что заняться нечем было, а вы тут репостите.

Атата.


"Ошибка в bash-скрипте привела к полной очистке всех серверов..."
Отправлено Аноним , 14-Апр-16 22:13 
Ну, это... Что делать-то будете? testdisk? photorec? R-Studio for Linux ($80)? А лучше в платный центр восстановления данных с повреждённых носителей. Вот уж они озолотятся с 1535 серверов!

"Ошибка в bash-скрипте привела к полной очистке всех серверов..."
Отправлено Аноним , 14-Апр-16 22:13 
когда я был сисадмином - мне не раз приходилось похерить пользовательские данные... это были и базы 1С, домены, пользовательские фотки, документы... я думал только я один такой дuбuл на свете...

"Ошибка в bash-скрипте привела к полной очистке всех серверов..."
Отправлено Аноним , 14-Апр-16 22:20 
И долго вы были сисадмином позвольте спросить ?

"Ошибка в bash-скрипте привела к полной очистке всех серверов..."
Отправлено Led , 14-Апр-16 22:32 
> И долго вы были сисадмином позвольте спросить ?

По резальтатам "работы" насильно переквалифицировали в "модного дизайнера".


"Ошибка в bash-скрипте привела к полной очистке всех серверов..."
Отправлено Аноним , 14-Апр-16 22:32 
лет 8

"Ошибка в bash-скрипте привела к полной очистке всех серверов..."
Отправлено Led , 14-Апр-16 22:31 
> я думал только я один такой дuбuл на свете...

Да нет же, дохрена вас...



"Ошибка в bash-скрипте привела к полной очистке всех серверов..."
Отправлено Аноним , 14-Апр-16 22:18 
Вообще-то Ansible по умолчанию падает с ошибкой при попытке обратиться к неопределенной переменной.

"Ошибка в bash-скрипте привела к полной очистке всех серверов..."
Отправлено mickvav , 14-Апр-16 23:06 
Дык, их, видать, пустыми строками определили :)

"Ошибка в bash-скрипте привела к полной очистке всех серверов..."
Отправлено Аноним , 15-Апр-16 00:07 
> Дык, их, видать, пустыми строками определили :)

Так! Человек вновь победил бездушную машину!


"Ошибка в bash-скрипте привела к полной очистке всех серверов..."
Отправлено Megabit , 14-Апр-16 22:19 
>>...мне не раз приходилось похерить пользовательские данные...

Наверное ты таки ОДИН...


"Ошибка в bash-скрипте привела к полной очистке всех серверов..."
Отправлено rshadow , 14-Апр-16 22:21 
1 апреля давно закончилось.

$ sudo rm -fr /
rm: опасно рекурсивно обрабатывать «/»
rm: используйте --no-preserve-root, чтобы отменить предупреждение об опасности


"Ошибка в bash-скрипте привела к полной очистке всех серверов..."
Отправлено Аноним , 15-Апр-16 04:11 
Не bashем единым.

"Ошибка в bash-скрипте привела к полной очистке всех серверов..."
Отправлено Сиромант , 15-Апр-16 06:50 
При чем здесь bash? Это GNU coreutils.

"Ошибка в bash-скрипте привела к полной очистке всех серверов..."
Отправлено Аноним , 14-Апр-16 22:26 
Это был тонкий троллинг, закончившийся полнейшей жирнотой. Новость можно удалять.
http://serverfault.com/questions/769357/recovering-from-a-rm-rf

"Ошибка в bash-скрипте привела к полной очистке всех серверов..."
Отправлено commiethebeastie , 14-Апр-16 22:27 
А /usr оно удалило?

"Ошибка в bash-скрипте привела к полной очистке всех серверов..."
Отправлено Аноним , 15-Апр-16 00:05 
> А /usr оно удалило?

Всё удалило. Даже /dev/null.


"Ошибка в bash-скрипте привела к полной очистке всех серверов..."
Отправлено Аноним , 14-Апр-16 22:34 
я тоже так сделал, правда, с фотками, не я один такой значит...

"Ошибка в bash-скрипте привела к полной очистке всех серверов..."
Отправлено ALex_hha , 14-Апр-16 22:36 
> Вот вам и мнимая простота Ansible.

т.е. этот же злосчастный bash скрипт на salt, chef, puppet отработал бы по другому? :D

> На всяких sh кодить дело не благодарное.

set -u нее, не слышал? Ну дак кто вам виноват.

#!/bin/bash

set -u
set -e

dir1="foo"
#dir2="bar"

rm -fr ${dir1}/${dir2}

# test.sh
./test.sh: line 11: dir2: unbound variable

P.S.
правда если будет dir1="" и dir2="", то сработает :)


"Ошибка в bash-скрипте привела к полной очистке всех серверов..."
Отправлено Аноним , 14-Апр-16 23:03 
О, я так другу в детстве программу написал и дал потестить. Только не сказал, что для того чтобы в ней появилось меню нужно нажать M, а до этого F10. В итоге он сказал, что программа ему очень понравилась, но впоследствии я выяснил, что дальше пустого чёрного экрана в её использовании он так и не продвинулся. Правда мне тогда было лет 12, а сколько лет было тому, кто придумал необходимость в "set -u" и сделал пробел значимым символом при присваивании значения переменной?

"Ошибка в bash-скрипте привела к полной очистке всех серверов..."
Отправлено Led , 15-Апр-16 21:19 
> Правда мне тогда было лет 12

Ну и зачем здесь эта прошлогодняя история?


"Ошибка в bash-скрипте привела к полной очистке всех серверов..."
Отправлено Аноним , 15-Апр-16 00:00 
# set -u бесполезен когда переменная объявлена, но пуста, пример: dir1=""
# Поэтому единственный выход проверить значения переменных непосредственно перед деструктивными операциями:


#!/usr/bin/env bash

err () {
   echo "Error: $1"
   exit 1
}

#dir1="1"
dir2="2"

[ "$dir1" == ""  ] && err "Undefined variable 'dir1'"
[ "$dir2" == ""  ] && err "Undefined variable 'dir2'"

cd ${dir1} && rm -R ${dir2}

# EOF


Кстати, -f в rm намекает на его кустарность оригинального скрипта.


"Ошибка в bash-скрипте привела к полной очистке всех серверов..."
Отправлено Аноним , 15-Апр-16 01:29 
Использование -u и -e для чего-либо кроме отладки - дурной тон.

"Ошибка в bash-скрипте привела к полной очистке всех серверов..."
Отправлено Andrey , 15-Апр-16 07:49 
> Использование -u и -e для чего-либо кроме отладки - дурной тон.

И чем они помешают в production? Пускай лучше упадет, чем некорректно работать будет.

Небольшая иструкция по работе с ошибками в скриптах: http://users.livejournal.com/_winnie/277041.html


"Ошибка в bash-скрипте привела к полной очистке всех серверов..."
Отправлено Аноним , 15-Апр-16 21:30 
>> Использование -u и -e для чего-либо кроме отладки - дурной тон.
> И чем они помешают в production? Пускай лучше упадет, чем некорректно работать
> будет.

Тем что их поведение не очевидно во многих случаях, всё это описано подробно в bash FAQ.


"Ошибка в bash-скрипте привела к полной очистке всех серверов..."
Отправлено QuAzI , 14-Апр-16 22:38 
Снапшоты ФС не удаляются через rm, но почему-то народ считает что снапшоты не комильфо для бекапов

"Ошибка в bash-скрипте привела к полной очистке всех серверов..."
Отправлено Аноним , 14-Апр-16 23:28 
Открой для себя бездну гугль: консистентное состояния и snapshot.

"Ошибка в bash-скрипте привела к полной очистке всех серверов..."
Отправлено . , 15-Апр-16 02:17 
В нормальных FS - снапшоты нормальные. :-р

"Ошибка в bash-скрипте привела к полной очистке всех серверов..."
Отправлено Elhana , 15-Апр-16 03:14 
Снапшоты не комильфо для бекапов, потому что если диск накернится, то даже 100 снапшотов вам не помогут. Но по своему они полезны.

"Ошибка в bash-скрипте привела к полной очистке всех серверов..."
Отправлено Аноним , 15-Апр-16 07:00 
Помогут, если их хранить на другом накопителе.

"Ошибка в bash-скрипте привела к полной очистке всех серверов..."
Отправлено JL2001 , 15-Апр-16 15:09 
> Снапшоты не комильфо для бекапов, потому что если диск накернится, то даже
> 100 снапшотов вам не помогут. Но по своему они полезны.

снапшоты комильфо для бэкапов, а вот нераспределённое хранение бэкапов (которые могут быть в любом виде) - некомильфо
(хотя в терминалогии я не силён, что там называют бэкапами, что версионированием, а что резервным копированием - не в курсе)


"Ошибка в bash-скрипте привела к полной очистке всех серверов..."
Отправлено Аноним , 14-Апр-16 23:40 
Один разгильдяй не умеет писать скрипты на bash-е, не имеет системы контроля версий, не умеет настроить бекап. Второй держит этого "специалиста" на работе. А виноват ansible.

"Ошибка в bash-скрипте привела к полной очистке всех серверов..."
Отправлено Anonymous1 , 14-Апр-16 23:54 
> Один разгильдяй не умеет писать скрипты на bash-е, не имеет системы контроля
> версий, не умеет настроить бекап. Второй держит этого "специалиста" на работе.
> А виноват ansible.

Да блин, вот и выросло поколение гуевых админов, которые ждут везде подтверждений типа "А Вы уверены?", причем раз по 10 на каждую сомнительную операцию.
Спасет таких админов только следующая метода:
QR-код, создаваемый спец. приложением на Айфоне, которым команды в баш-е на "управляемых" ими серверах будут через сервис Гугла писать, с предварительной проверкой их искусственным интеллектом от Майкрософт. Потому что собственный интеллект задропан в ноль и заменен креативностью еще в школе, что и удостоверено высоким баллом ЕГЭ.


"Ошибка в bash-скрипте привела к полной очистке всех серверов..."
Отправлено Анином , 15-Апр-16 01:45 
Всетаки bash как язык программирования крайне неудобен, что повышает вероятность ошибок.

"Ошибка в bash-скрипте привела к полной очистке всех серверов..."
Отправлено Аноним , 15-Апр-16 21:36 
> Всетаки bash как язык программирования крайне неудобен, что повышает вероятность ошибок.

Точно такая ошибка с удалением всего содержимого диска есть например в Samsung kies, а он явно не на bash.


"Ошибка в bash-скрипте привела к полной очистке всех серверов..."
Отправлено IMHO , 14-Апр-16 23:48 
код покажите, может он еще там и dd if=/dev/zero of=/dev/hdd$inc

"Ошибка в bash-скрипте привела к полной очистке всех серверов..."
Отправлено Аноним , 15-Апр-16 00:25 
Он там уже написал, что перепутал if и of, а потом — что почти всё удалось восстановить.

"Ошибка в bash-скрипте привела к полной очистке всех серверов..."
Отправлено Эль , 15-Апр-16 00:47 
Он в комментариях дальше пишет, что if и of перепутал, когда один из дисков восстанавливал, так что да.

"Ошибка в bash-скрипте привела к полной очистке всех серверов..."
Отправлено Аноним , 14-Апр-16 23:58 
> бэкапы, хранилище которых было примонтировано к одному из серверов

Правильная архитектура не должна позволять выстрелить себе в ногу. Надо монтировать read-only, или вообще отдавать данные с коиента на сервер.


"Ошибка в bash-скрипте привела к полной очистке всех серверов..."
Отправлено JL2001 , 15-Апр-16 15:14 
>> бэкапы, хранилище которых было примонтировано к одному из серверов
> Правильная архитектура не должна позволять выстрелить себе в ногу. Надо монтировать read-only

проблема в том что это ошибка в скрипте который:
1) и должен работать с пользовательскими данными, тоесть они при его работе будут в w
2) распределяется к работе на все сервера

даже если бы ВЕСЬ диск не поврайтился - пользовательские данные потёрлись бы (даже забывая что сама новость похоже фейковая)
тоесть тут поможет только правильное бэкапирование с версионированием (ну и распределённостью)


"Ошибка в bash-скрипте привела к полной очистке всех серверов..."
Отправлено Аноним , 15-Апр-16 00:19 
О, да. Так им и надо! Это все от того, что все боятся сишки.

"Ошибка в bash-скрипте привела к полной очистке всех серверов..."
Отправлено JL2001 , 15-Апр-16 15:15 
> О, да. Так им и надо! Это все от того, что все боятся сишки.

как будто rm-rf написан не на сишке
правильно делают что боятся !!! сишка убила винт а баш тока отдал преступный приказ !!!!!1112


"Ошибка в bash-скрипте привела к полной очистке всех серверов..."
Отправлено Аноним , 15-Апр-16 00:27 
"rm -rf {foo}/{bar}"?  Что значит вообще значит?  В шелл скриптах для интерполяции используется символ доллара, а в Jinja2 и YAML, которые используются в Ansible, -- две пары фигурных скобок.

"Ошибка в bash-скрипте привела к полной очистке всех серверов..."
Отправлено Аноним , 15-Апр-16 00:29 
rm - rf / не удаляет данные уже лет пять как, удалите этот фейк

"Ошибка в bash-скрипте привела к полной очистке всех серверов..."
Отправлено Аноним , 15-Апр-16 04:13 
ай красаучик админ, четко ошибся, от души код

"Ошибка в bash-скрипте привела к полной очистке всех серверов..."
Отправлено eRIC , 15-Апр-16 06:10 
rm -rf всегда считалась опасной командой, LOL

"Ошибка в bash-скрипте привела к полной очистке всех серверов..."
Отправлено Аноним , 15-Апр-16 07:40 
я всегда удаляю данные через mv: mv /tmp/trash.txt /dev/null

"Ошибка в bash-скрипте привела к полной очистке всех серверов..."
Отправлено Че , 15-Апр-16 09:11 
Как ща помню. Перепутал как-то "./", написав, вместо этого "/." Когда понял, что что-то пошло не так, большая часть файлов в каталоге /dev была удалена. 8-[=====]X
В общем-то, к утру SCO был починен и бодро жужжал ораклом. 8-)

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

А вся эта беда была нужна потому, что у софта был какой-то глюк, когда он начинал в великом множестве плодить пустые файлы, что приводило к остановке дисковой системы, по причине занятости всех i-node.


"Ошибка в bash-скрипте привела к полной очистке всех серверов..."
Отправлено ALex_hha , 18-Апр-16 13:59 
> Тем что их поведение не очевидно во многих случаях, всё это описано подробно в bash FAQ.

а какое может быть не очевидное поведение у set -u?