Нет сил больше молчать, буду хвастаться.

Всем привет! Мне нужно срочно поделиться с миром, какой я весь из себя молодец, нет сил больше держать это в себе. В общем, встала задача восстановить данные с жёстких дисков сервера фирмы, где я раньше работал. Так исторически сложилось, что сервер после развала фирмы по договорённости с руководством переехал ко мне домой. Родилась идея восстановить данные с сервера. Сервер давно не включается, в нём старые HDD IDE диски. Всего дисков три штуки: 160Gb, 320Gb и 1.5Tb. Файловая система на них ext2fs или часть RAID массива. Была идея подключить их к виртуальной машине Debian и получить доступ к файлам.

Как я поступил изначально — купил переходник IDE->USB и попробовал подключить диск к компьютеру.
IDE to USB converter
Ничего не получилось даже с отдельным блоком питания — отправил переходник обратно продавцу. Стало понятно, что подключить диски напрямую малой кровью не получится, значит, надо делать копию дисков и подключать к виртуальной машине виртуальные жёсткие диски с этих копий. Постепенно родился такой план решения задачи:

  1. Получить посекторные дампы с дисков в виде огромных файлов
  2. Получить виртуальные жёсткие диски с этих файлов и подключить их к виртуальной машине
  3. Получить доступ к файлам из этих дампов из виртуальной машины

Посекторные дампы дисков

Отнёс диски в специализированную контору, которая сделала посекторную копию двух дисков на принесённый мною новый SATA диск. Каждая копия обошлась мне в 1500₽. Новый SATA диск вышел в районе 4000₽. Через пару недель принёс диск с копиями домой, воткнул в компуктер и получил вот такую картину:
Список дампов
Второй файл оказался битый, потому что новый диск для хранения дампов оказался барахлом. НИКОГДА НЕ ПОКУПАЙТЕ Seagate ST2000VX000 — у меня он начал сыпаться после 19 часов работы. Так что сначала запустил команду для восстановления всех файлов, которая справилась за каких-то три часа:

chkdsk /F /R /X

и приступил к следующему шагу.

Конвертирование дампов в виртуальные жёсткие диски для виртуальной машины и их подключение

Ни одна из известных мне виртуальных машин (VirtualBox, VMWare, Hyper-V) не поддерживает сырые данные в виде виртуального жёсткого диска, так что в процессе поиска решения, благодаря статье, наткнулся на бесплатную утилиту Startwind V2V Converter, при помощи которой и сконвертировал сырые дампы в .vdi (VirtualBox Disk) и .vmdk (VMWare Virtual Disk). Программа очень проста в использовании. Выбираем источник данных Local File, место назначения Local File. Потом тип файла и его подтип. Мне пришлось сделать два разных типа, потому что, как я писал выше, второй файл битый, и в формате .vdi VirtualBox его переварить не смогла, а вот в формате .vmdk вполне.
Виртуальную машину я использовал Oracle VirtualBox, просто потому что она бесплатная. Хотел использовать Hyper-V, встроенную в Windows 10 Pro, но она ни в каком виде не смогла подключить второй битый файл.
Подключение расписывать тоже не буду, покажу финальный скриншот:
VirtualBox virtual HDD

Финальный аккорд — получаем доступ к файлам

После подключения дисков и запуска Debian необходимо определить, куда они подключились. В линуксе это устройства /dev/sd[a-z], при этом /dev/sda уже занят. Значит, это диски sdb и sdc. Запускаем

fdisk -l /dev/sd[b,c]

И получаем следующую картину:
fdisk
Отсюда следует, что /dev/sdc2 можно сразу монтировать командой:

mount /dev/sdc2 /mnt/memory-150

А на диске /dev/sdb располагается кусок raid массива. Я в них абсолютно ничего не понимаю, зато умею гуглить, и нашёл статью, как подключить один кусок из программного raid массива — тыц. Как бездумная, но опытная обезьянка, выполнил шаманство с запуском pvscan, mdamd, lvm2 и прочими командами, и у меня появилось устройства /dev/onraid/root /dev/onraid/shares /dev/onraid/var, которые я успешно смонтировал командами:

mount /dev/onraid/root /mnt/memory-300-root
mount /dev/onraid/shares /mnt/memory-300-shares
mount /dev/onraid/var /mnt/memory-300-var

Всё, результат есть, файлы доступны, можно продавать исходники пустить ностальгическую слезу. Осталось проделать похожие процедуры с третьим диском на полтора терабайта, но у меня пока нет таких свободных объёмов. А потом можно подумать, что делать с этим добром, потому что самые свежие исходники там от 2010 года и выглядят местами очень наивно.

Инструкция по замене третьего стоп-сигнала на SEAT Altea Freetrack

Всем привет! Давно бесил меня нерабочий третий стоп-сигнал и буквально недавно я его поменял вот этими вот самыми программистскими руками. Поделюсь с вами инструкцией.

Для замены третьего стоп-сигнала необходимо снять обшивку пятой двери, которая состоит из двух частей: верхней и нижней. Нижняя часть крепится клипсами и четырьмя шурупами. Два из них под заглушками, два возле выемки для закрытия багажника. Верхняя часть крепится только на клипсы. Сначала снимается нижняя часть обшивки, затем верхняя часть.
Сам стоп-сигнал состоит из двух частей: внешний красный плафон и прозрачный корпус с микросхемой. Корпус стоп-сигнала разделяется с некоторым усилием на две части, если потянуть за длинный хвостик прозрачного корпуса вправо. А теперь подробно и по пунктам.

Для замены стоп-сигнала требуется провести следующие операции:

  1. Снять нижнюю часть обшивки. Снимаем предварительно заглушки, выкручиваем под ними два шурупа, затем два шурупа в выемке и тянем обшивку вниз, взявшись за отверстия от заглушек. Фоток не делал, шурупы найдёте самостоятельно.
  2. Снять верхнюю часть обшивки. Сначала тянем обшивку за бока к центру, чтобы она сузилась, затем вытягиваем центр на себя, согласно стрелочкам: Верхняя часть обшивки пятой двери
  3. Разделить стоп-сигнал на две части, потянув за язычок вправо через отверстие справа, указанное стрелочкой, зацепив за язычок ключом на 10: Отверстие в двери для доступа к правой части стоп-сигнала Третий стоп-сигнал SEAT Altea Freetrack. Код запчасти 5P0945097A
  4. После щелчка поддеть красный плафон снаружи пластиковой карточкой и извлечь его из гнезда
  5. Вытащить всю конструкции наружу с внешней стороны двери
  6. Поменять стоп-сигнал на новый, благо он доступен по цене, если вы сын депутата или простого русского олигарха. Номер запчасти 5P0945097A. Лично я заказывал б/у в компании Ted Auto через сайт zzap.ru.
  7. Проверить работоспособность
  8. Собрать всё в обратном порядке

Единственный момент с рывками был во время снятия обеих частей обшивки. Стоп-сигнал разделился на две части без рывков, с некоторым усилием. Все работы выполняйте в тёплое время года, чтобы пластиковые детали были более пластичными, в холодное время повышается риск отломать клипсы и сломать стоп-сигнал. Я делал это при температуре +26°C.

Рекурсивное блокирование мьютекса, знакомимся с std::recursive_mutex.

Всем привет! Случайно вспомнил, что мой блог про программирование, математику ващет и в целом создан для просвещения мешков с костями и мясом.

Поэтому хочу рассказать про std::recursive_mutex. Он такой же, как и std::mutex, но запоминает номер потока, из которого был заблокирован и вторую блокировку в том же потоке игнорирует. В моём случае был приблизительно такой код:

struct Item {
    ~Item() {
        getStorage().RemoveItem(otherItemId);
        getStorage().AddItem(newItem);
    }
}
using ItemPtr = std::shared_ptr<Item>;
using ItemRef = const ItemPtr&;
using ItemId = std::size_t;
 
class Storage {
public:
    ItemId AddItem(ItemRef item)
    {
        std::scoped_lock lock(m_itemsGuard);
        m_items.push_back(item);
        return m_items.size() - 1;
    }
 
    bool HasItem(ItemId id) {
        return m_items.size() < id;
    }
 
    void RemoveItem(ItemId id)
    {
        std::scoped_lock lock(m_itemsGuard);
        auto item = m_items.at(id);
        m_items.erase(m_items.begin() + id);
        item.reset(); // Тут повторно заходим в RemoveItem
    }
 
private:
    std::vector<ItemPtr> m_items;
    std::recursive_mutex m_itemsGuard;
};
 
 
void test() {
    Storage storage;
    auto itemId = storage.AddItem(std::make_shared<Item>());
    storage.RemoveItem(itemId); // здесь проблема
}

Обратите внимание, что в деструкторе Item есть обращение к методам Storage, а там на каждое изменение массива стоит блокировка мьютекса. И оно попадет в вечный lock с std::mutex. А на этом у меня всё. Enjoy!

Второе путешествие в Мармарис, Турция

На второй день после возвращения домой меня посетило давно забытое чувство — чувство голода. В отеле было навалом еды: шведский стол на завтрак, обед и ужин, вдобавок бургеры, пицца, хот доги, нагетсы, шаверма и прочий фастфуд без ограничений — удержаться было очень тяжело, всё очень вкусное, много и включено. Набрал пару килограмм за десять дней. Впервые в отеле Турции вино (красное, белое, розовое) было хорошего качества и разлито по графинчикам по пол-литра. Пиво можно и не упоминать. На жаре — чистая амброзия. Как не спились за это время — загадка. WiFi интернет бесплатный и работает относительно неплохо. Британцы крикливые, как чайки, и некоторые особо толстые особи катаются на электрических машинках, как в Южном Парке.

Отель Blue Bay Platinum был недалеко от отеля Prestige Garden, где я был в прошлый раз много лет назад.

BLUE BAY PLATINUM HOTEL 5*

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

Экскурсии выбрали задолго до вылета, поэтому приехали подготовленные с определенной целью: максимум искупаться и попрыгать с лодки в лазурное море. Всего экскурсий было четыре: остров Клеопатры, слияние морей, эгейские острова и река Дальян. Все заказывали у Давида из Hot Travel Agency. Сначала был хамам.

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

Остров Клеопатры

План такой: вас привозят на остров, там вы тусуетесь два часа под пальмами, отвозят обратно. Дополнительно есть остановки для купания до острова и после. Пляж Клеопатры огорожен, спуск к воде сделан отдельными лесенками. Песок на пляже прекрасен, вода прозрачная и теплейшая, как в ванне, обед включен. Обед состоит из макарошек, куриного шницеля, какого-то салата и куска хлеба, он стандартный для всех экскурсий в Турции и входит в стоимость, безалкогольные напитки без ограничений: кола, фанта, спрайт, чай, кофе. Вход на остров оплачивается отдельно и стоит 14 баксов. Если не платите, сидите два часа на судне. Глупо? Глупо, согласен.
Минусы: стоимость билета Давид нам озвучивал в 10 баксов, пришлось брать в долг у гида. Неприятно, но не катастрофа. Всегда берите с собой денег с запасом.

Слияние морей

Откровенно говоря, слияния морей (Эгегейского и Средиземноморского) не показывают. Просто поездка в город Турунч на корабле с остановками для купания. Называется так для привлечения туристов. Есть два варианта: с безлимитными напитками и с добавлением безлимитного алкоголя за 10 баксов. Мы взяли с алкоголем и тут нас попытались нагреть: не выдали специальные браслеты, которые положены в таких случаях. После вопроса в WhatsApp Давиду нас неожиданно нашли и соответствующие браслеты выдали. Подозреваю, что попытка нагреть нас была со стороны команды корабля. Одна две остановки для купания, затем час в городе Турунч, потом ещё одна остановка для купания. Кроме адской жары в городе Турунч (высаживают в полдень!) и попыткой нагреть (будьте внимательны!) экскурсия ничем особенным не запомнилась.

Эгейские острова

Самая насыщенная на события поездка на корабле: шесть островов, среди них: остров с козликами, с развалинами греческого храма, остров с кроликами, остров «Зубы дракона» с пещерами и прочее. Нам очень понравилось, никаких нареканий, судно называется Granitsa, у местного гида есть любопытная особенность: заканчивать объявления по громкой связи протяжным «Спасиба-а-а!» с ударением на последний слог, ни с кем её не перепутаете. Обеспечивает хорошее настроение всю дорогу.

Река Дальян

Алгоритм такой: грузимся на маленькое судно из автобуса, идём по реке Дальян до впадения её в море, там купаемся полтора часа, затем обратно.

Судно на реке Дальян

Впадение реки Дальян в море захватывает дух и вызывает полный восторг. Так что природа — огонь, впечатлений масса: искупались на все деньги, носились по волнам, как малые дети, сплошной восторг, вода — парное молоко. На реке можно лицезреть древние гробницы, высеченные прямо в скале.

Река Дальян, гробницы

Пару раз ездили в порт Мармариса на стоянку яхт и больших кораблей. От отеля до стоянки 45 минут ходьбы.

Судно в порту Мармариса

Подведу итог: путешествие понравилось, Мармарис рекомендую к посещению. Намного лучше Алании и Анталии вместе взятых. Возможно, конкуренцию может составить Кемер, но это неточно.

P.S. Кому интересно, туры ищем через сайт конторы Тур-Касса. Ни разу не реклама, просто они ищут у всех операторов. Для быстрого поиска самое оно. Сначала ищем отели в нужном городе, нужной страны, потом смотрим на сайте туроператора — может выйти немного дешевле.

Блог Евгения Жирнова