Всем привет, меня зовут Антон. Я работаю в техподдержке небольшой IT-аутсорс компании. Однажды мы получили звонок от нового клиента. Это был сисадмин небольшой ecommerce-компании, с которой мы ранее не работали. На нас он вышел очень просто — просто вбил в Яндекс запрос «починить сервер».
Сначала все это выглядело, как обычный вызов. Я взял свой рабочий ноут, перекус, и выехал. На месте выяснилось, что сломался сервер со всеми рабочими файлами: архивом бухгалтерии, базой 1С, CRM и данными клиентов за последние два года. Работа офиса предсказуемо встала. В таких случаях у меня всегда возникает вопрос — кем надо быть, чтобы хранить все данные в одном месте? Но его я оставил при себе. Тем более, что в офисе хватало проблем, все паникуют и не знают, что делать.
Сервером оказался древний HP Proliant ML350 Gen4. Он стоял в кладовке, забытый и неухоженный.
Диагностику мне провести не удалось — сервер не пинговался и на попытки подключения по RDP не реагировал. Достаточно типичная ситуация на выездах. Подключил консоль и убедился, что все плохо. Сервер не загружался в операционную систему и находился в бесконечном цикле поиска загрузочного устройства. Далее, по классике, проверил настройки BIOS. Все прописано верно, проверил дисковый массив — тоже в порядке. Однако, сервер загружаться отказывался.
Стало очевидно, что повреждена главная загрузочная запись. Как обычно, я использовал дистрибутив на основе WinPE с типичным для таких случаев софтом. Но меня ждал сюрприз — WinPE не могла получить доступ к массиву.
Клиент нервничал все больше, на его высоком лбу проступали капельки пота, а на телефоне копились пропущенные. Нужно было быстро восстановить доступ и сохранить данные в целости. При этом резервного сервера или бэкапов не было (кто бы сомневался).
Была идея «вшить» драйверы в загрузочный дистрибутив, но это был бы самый долгий путь. Причины сбоя загрузочной записи не ясны, но её безопаснее восстанавливать после получения клиентом доступа к данным.
Сообщил гендиру возможные сценарии. После недолгого обсуждения решили вытащить данные, арендовать самый простой сервер и запилить их туда.
Для доступа к данным использовали популярный Live-дистрибутив для системных администраторов — GRML Live Linux. Он зарекомендовал себя в работе с любыми серверами, потому что поддерживает огромное количество железа, даже старого.
Записал на флешку, загрузил. Создал папку для монтирования:
mkdir /mnt/storage
С помощью fdisk -l посмотрел, как массив определился в системе и примонтировал его:
mount /dev/sdX /mnt/storage
Файлы стали видны, но их было сложно вытащить с сервера. Сетевого хранилища для передачи по локальной сети нет. Подключить обычный SATA-накопитель нельзя, в сервере есть только Ultra-320 SCSI. Жесткого диска для соединения по USB тоже нет. Остался один, но надежный вариант — залить файлы в облако, а затем выкачать их на другой сервер.
В качестве облака я обычно выбираю облачное хранилище от Selectel, потому что это недорогой и надежный провайдер, который создал приватный контейнер, директорию для данных и отдельного пользователя с полными правами доступа. Самым простым вариантом обращения к хранилищу стало использование протокола FTP.
В комплекте с GRML есть консольный FTP-клиент под названием lftp, умеющий работать в многопоточном режиме.
1. Подключился к FTP-серверу:
lftp ftp.selcdn.ru
2. Авторизовался:
lftp ftp.selcdn.ru:~> user аккаунт_имяпользователя@ftp.selcdn.ru
Password: ввели пароль по запросу
3. Запустил копирование в 10 потоков:
mirror -R /mnt/storage/data /data --parallel=10
Сервер зашуршал дисками и начал процесс копирования. Через несколько часов все содержимое сервера было в хранилище. За это время мы подготовили арендованный сервер: установили ОС и необходимый софт. Потом просто забрал данные на новом сервере с помощью FTP-клиента Filezilla.