- Что такое суперблок в ext4
- Что такое суперблок в ext4
- Блок файловой системы
- Группы блоков файловой системы
- Так что же такое суперблок?
- Как увидеть, что хранится в суперблоке?
- Как восстановить поврежденный суперблок?
- Файловая система Ext4
- Техническое описание функциональных возможностей Ext4 как файловой системы в Linux. Изучение группы блоков Ext4: суперблок, блок описания группы, битовые карты, таблица индексных дескрипторов. Оценка стабильности, производительности и совместимости Ext4.
- Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
- Суперблок в линуксе
- Блок файловой системы
- Группы блоков файловой системы
- Так что же такое суперблок?
- Как увидеть, что хранится в суперблоке?
- Как восстановить поврежденный суперблок?
- Экстенты, файлы, суперблоки. Как работают файловые системы ext3 и ext4 и как в них восстанавливать данные
- Содержание статьи
- Знакомьтесь! Семейство расширенных файловых систем
- Немного об истоках
- Поколение ext3
- Продолжение доступно только участникам
- Вариант 1. Присоединись к сообществу «Xakep.ru», чтобы читать все материалы на сайте
Что такое суперблок в ext4
Информация, хранимая в суперблоке, используется для организации доступа к остальным данным на диске. В суперблоке определяется размер файловой системы, максимальное число файлов в разделе, объем свободного пространства и содержится информация о том, где искать незанятые участки. При запуске ОС суперблок считывается в память и все изменения файловой системы вначале находят отображение в копии суперблока, находящейся в ОП, и записываются на диск только периодически. Это позволяет повысить производительность системы, так как многие пользователи и процессы постоянно обновляют файлы. С другой стороны, при выключении системы суперблок обязательно должен быть записан на диск, что не позволяет выключать компьютер простым выключением питания. В противном случае, при следующей загрузке информация, записанная в суперблоке, окажется не соответствующей реальному состоянию файловой системы.
Суперблок имеет следующую структуру.
Название поля | Тип | Комментарий |
1.2em s_inodes_count | ULONG | Число индексных дескрипторов в файловой системе |
s_blocks_count | ULONG | Число блоков в файловой системе |
s_r_blocks_count | ULONG | Число блоков, зарезервированных для суперпользователя |
s_free_blocks_count | ULONG | Счетчик числа свободных блоков |
s_free_inodes_count | ULONG | Счетчик числа свободных индексных дескрипторов |
s_first_data_block | ULONG | Первый блок, который содержит данные. В зависимости от размера блока, это поле может быть равно 0 или 1 |
s_log_block_size | ULONG | Индикатор размера логического блока: 0 = 1 Кб; 1 = 2 Кб; 2 = 4 Кб |
s_log_frag_size | LONG | Индикатор размера фрагментов (кажется, понятие фрагмента в настоящее время не используется) |
s_blocks_per_group | ULONG | Число блоков в каждой группе блоков |
s_frags_per_group | ULONG | Число фрагментов в каждой группе блоков |
s_inodes_per_group | ULONG | Число индексных дескрипторов (inodes) в каждой группе блоков |
s_mtime | ULONG | Время, когда в последний раз была смонтирована файловая система |
s_wtime | ULONG | Время, когда в последний раз производилась запись в файловую систему s_mnt_count USHORT Счетчик числа монтирований файловой системы. Если этот счетчик достигает значения, указанного в следующем поле ( s_max_mnt_count ), файловая система должна быть проверена (это делается при перезапуске), а счетчик обнуляется |
s_max_mnt_count | SHORT | Число, определяющее, сколько раз может быть смонтирована файловая система |
s_magic | USHORT | «Магическое число» ( 0xEF53 ), указывающее, что файловая система принадлежит к типу ex2fs |
s_state | USHORT | Флаги, указывающее текущее состояние файловой системы (является ли она чистой ( clean ) и т.п.) |
s_errors | USHORT | Флаги, задающие процедуры обработки сообщений об ошибках (что делать, если найдены ошибки) |
s_pad | USHORT | Заполнение s_lastcheck ULONG Время последней проверки файловой системы |
s_checkinterval | ULONG | Максимальный период времени между проверками файловой системы |
s_creator_os | ULONG | Указание на тип ОС, в которой создана файловая система |
s_rev_level | ULONG | Версия (revision level) файловой системы |
s_reserved | ULONG[235] | Заполнение до 1024 байт |
Что такое суперблок в ext4
Суперблок содержит информацию, необходимую для монтирования и управления работой файловой системы в целом (например, для размещения новых файлов).
Блок файловой системы
После форматирования диска или раздела сектора на диске разделены на небольшие группы. Такая группа секторов называется блоком. Размер блока может быть разным и задается как параметр ключа команды форматирования. Например
Размер блока может быть разным. Это зависит от типа файловой системы
При выборе размера блока нужно учесть ряд моментов
Размер блока влияет на скорость чтения/записи с диска. Представим себе файл размеров в несколько сот мегабайт, который считывается с диска блоками по 1Кб. Тот же файл будет считываться быстрее если размер блока файловой системы будет 4Кб или 8Кб. Это ясно. Поэтому при форматировании имеет смысл задать блок большего размера, если планируется использовать файлы большого размера
Также верно и обратное утверждение. В случае хранения небольших файлов лучше использовать блоки минимального размера
Ядро Linux работает с размером блока файловой системы, а не с размером сектора диска (обычно 512 байт). Важно понимать, что размер блока файловой системы не может быть меньше размера сектора диска и всегда будет кратным ему. Также ядро ожидает, что размер блока файловой системы будет меньше или равно размеру системной страницы
Размер системной страницы можно увидеть выполнив команду
Группы блоков файловой системы
Блоки, о которых мы говорили ранее обьеденяются в группы блоков, что позитивно отражается на операциях чтения/записи так как уменьшается время чтения/записи больших обьемов данных
Файловая система EXT разбивает все доспупное пространство на группы блоков равного размера. Эти группы располагаются последовательно, одна за другой
Загрузочный блок | Группа блоков 1 | Группа блоков 2 | Группа блоков 2 | Группа блоков 3 |
Количество блоков в группе неизменно и может быть расчитано по формуле
Взглянем на вывод команды mke2fs
Отметим то, о чем говорили выше
Также видны блоки в которых хранятся резервные копии суперблока
Так что же такое суперблок?
Самым простым определением суперблока могло бы быть следующее утверждение
Суперблок — это блок в котором хранятся метаданные файловой системы
Аналогично тому, как i-ноды хранят метаданные о файлах, суперблок хранит метаданные о файловой ситеме. Если вдруг суперблок поврежден, то не возможно будет примонтировать файловую систему. Обычно при загрузке система проверяет суперблок и при необходимости исправляет его, что в результате приводит к корректному монтированию файловых систем
Некоторые данные, которые хранятся в суперблоке. Например
Основная копия суперблока хранится в самой первой группе блоков. Она названа основной, потому что считывается системой в процессе монтирования файловой системы. Так как отсчет блоковых групп начинается с 0 то можно говорить о том, что суперблок хранится в начале блоковой группы 0
Суперблок весьма критичен для файловой системы. Поэтому в каждой блоковой группе есть копии суперблока. Это дает нам право думать, что поврежденный суперблок будет восстановлен всякий раз, когда это будет необходимо
Может показаться, что наличие в каждой блоковой группе резервных копий суперблока приводит к потреблению большого дискового пространства. Для этого в последних версиях систем была реализована функция «sparse_super» целью которой было создание резервных копий в группе блоков 0, 1, 3, 5, 7
Как увидеть, что хранится в суперблоке?
Для этого воспользуемся командой dumpe2fs
Еще один вывод команды показывает информацию о суперблоке
Как восстановить поврежденный суперблок?
Для начала нужно проверить файловую систему утилитой fsck
В случае если fsck обнаружила ошибку чтения суперблока можно попробовать сделать следующее:
Для начала определим где расположены резервные копии суперблока. Для этого выполняем
Далее восстановливаем суперблок из бекапа при помощи e2fsck
В данном случае в блоке 819200 хранится резервная копия суперблока. После применения команды пробуем снова монтировать файловую систему. Либо как вариант использовать ключ sb команды mount, который указывает на расположение копии суперблока
В данном случае считываем копию суперблока из блока 819200
Файловая система Ext4
Техническое описание функциональных возможностей Ext4 как файловой системы в Linux. Изучение группы блоков Ext4: суперблок, блок описания группы, битовые карты, таблица индексных дескрипторов. Оценка стабильности, производительности и совместимости Ext4.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | курсовая работа |
Язык | русский |
Дата добавления | 12.04.2013 |
Размер файла | 31,6 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
Размещено на http://www.allbest.ru/
«Московский государственный технический университет
(МГТУ им. Н.Э. Баумана)
Факультет «Информатика и системы управления»
Кафедра «Компьютерные системы и сети»
на тему: «Файловая система Ext4»
Студент: Порядин И.А.
Преподаватель: Пугачев Е.К.
1. Новые возможности ext4 (в сравнении с ext3)
2. Структура группы блоков
2.2 Блок описания группы
2.4 Таблица индексных дескрипторов
Список использованных источников
— Ubuntu начиная с версии 9.1
— Mandriva Linux 2010
— Red Hat Enterprise Linuх начиная с версии 6
Кроме этого, поддерживается в Ubuntu 9.04, Debian 6.0, Fedora 9.
В системах Windows доступ к томам с ext4 возможен посредством использования технологии coLinux. Поддержка Просмотра/Чтения реализована в программе Ext2read. Частичный функционал работы с ext4 на уровне драйвера Windows реализован в Ext2Fsd Project.
1. Новые возможности ext4 (в сравнении с ext3)
Традиционные файловые системы, произошедшие от Unix, такие как Ext3, используют схему непрямого отображения блоков для отслеживания каждого блока, отвечающего за хранение данных файла. Такой подход неэффективен для больших файлов, особенно при операциях удаления и усечения таких файлов, поскольку карта соответствия содержит по одной записи на каждый отдельный блок. В больших файлах блоков много, их карты соответствия большие, и обрабатываются они медленно.
48-битные номера блоков
На сегодняшний день максимальный размер файловой системы Ext3 равен 16 терабайтам, а размер файла ограничен 2 терабайтами. В Ext4 добавлена 48-битная адресация блоков, что означает, что максимальный размер этой файловой системы равен одному экзабайту
Выделение блоков группами (multiblock allocation)
Если в Ext3 нужно записать на диск новые данные, специальный механизм распределения блоков определяет, какие блоки из числа свободных будут для этого использованы. Проблема в том, что в Ext3 этот механизм распределяет за один подход только один блок (4 килобайта). Это означает, что, если нужно записать, скажем, 100 мегабайт данных, нужно будет обратиться к механизму распределения 25600 раз. Мало того, что это неэффективно, это к тому же не позволяет оптимизировать политику распределения, поскольку соответствующий механизм не имеет понятия о реальном объёме данных, подлежащем записи, а знает только об одном-единственном блоке.
Ext4 использует механизм многоблочного распределения (multiblock allocator, mballoc) который позволяет распределить любое количество блоков с помощью единственного вызова и избежать огромных накладных расходов. Файловая система хранит не только информацию о местоположении свободных блоков, но и количество свободных блоков, идущих друг за другом. При выделении места файловая система находит такой фрагмент, в который данные могут быть записаны без фрагментации. Это снижает уровень фрагментации файловой системы в целом. Благодаря этому производительность существенно вырастает, что особенно заметно при отложенном распределении с использованием экстентов. Эта возможность никак не влияет на формат данных.
Отложенное выделение блоков (delayed allocation)
Превышен лимит в 32000 каталогов.
В ext3, если не использовать специальные патчи, в одном каталоге можно было создать не более 32000 подкаталогов (или, если быть совсем точным, до 65535 каталогов, но только изменяя константы ядра). Ext4 снимает это ограничение и позволяет создавать неограниченное количество подкаталогов.
Резервирование индексных дескрипторов при создании каталога (directory inodes reservation)
При создании каталога резервируется несколько индексных дескрипторов. Впоследствии, при создании файлов в этом каталоге сначала используются зарезервированные индексные дескрипторы, и если таких не осталось, выполняется обычная процедура.
Увеличенный размер индексного дескриптора
Размер (по умолчанию) увеличен с 128 до 256 байтов. Это дало возможность реализовать те преимущества, которые перечислены ниже.
Временные метки с наносекундной точностью (nanosecond timestamps)
Более высокая точность времён, хранящихся в индексных дескрипторах. Диапазон хранящихся времён тоже расширен: если раньше верхней границей хранимого времени было 18 января 2038 года, то теперь это 25 апреля 2514 года
Версия индексного дескриптора
В индексном дескрипторе появился номер, который увеличивается при каждом изменении файла. Это будет использоваться, например, в NFSv4, для того чтобы узнавать, изменился ли файл.
Хранение расширенных атрибутов в индексном дескрипторе (EA in inode)
Хранение расширенных атрибутов, таких как ACL, атрибутов SELinux и прочих, позволяет повысить производительность. Атрибуты, для которых недостаточно места в индексном дескрипторе, хранятся в отдельном блоке размером 4KB. Предполагается снять это ограничение в будущем.
Контрольное суммирование в журнале (Journal checksumming)
Журнал является наиболее часто используемой частью диска, вследствие чего блоки, из которых он состоит, становятся особенно чувствительными к отказам оборудования. Более того, попытка восстановления при повреждённом журнале может привести к ещё более массовым повреждениям в данных. Ext4 подсчитывает контрольные суммы журнальных данных, что позволяет определить факт их повреждения. У этого есть и ещё одно преимущество: благодаря контрольным суммам можно превратить систему двухфазной фиксации журнала Ext3 в однофазную, что ускоряет файловые операции в отдельных случаях до 20 %, таким образом, улучшаются одновременно и надёжность, и производительность.
Режим без журналирования
Журналирование обеспечивает целостность файловой системы путём протоколирования всех происходящих на диске изменений. Но оно также вводит дополнительные накладные расходы на дисковые операции. В некоторых особых ситуациях журналирование и предоставляемые им преимущества могут оказаться излишними. Ext4 позволяет отключить журналирование, что приводит к небольшому приросту производительности.
Предварительное выделение (persistent preallocation)
Сейчас для того, чтобы приложению гарантированно занять место в файловой системе, оно заполняет его нулями. В ext4 появилась возможность зарезервировать множество блоков для записи и не тратить на инициализацию лишнее время. Если приложение попробует прочитать данные, оно получит сообщение о том, что они не проинициализированы. Таким образом, несанкционированно прочитать удалённые данные не получится. Плюсы предварительного выделения:
— приложение будет иметь столько места, сколько ему требуется, что особенно важно для приложений, работающих в реальном времени, поскольку файловая система может вдруг переполниться в процессе выполнения важной операции.
Дефрагментация без размонтирования (online Defragmentation)
Также имеется утилита e4defrag, которая позволяет дефрагментировать как отдельные файлы, так и всю файловую систему.
Неинициализированные блоки (uninitialised groups)
Пока не реализовано. Позволяет ускорить проверку файловой системы с помощью процедуры fsck. Блоки, отмеченные как неиспользуемые, проверяются группами, и детальная проверка производится, только если проверка группы показала, что внутри есть повреждения. Предполагается, что эта возможность может очень сильно ускорить процесс проверки целостности файловой системы; в зависимости от способа размещения данных время проверки будет составлять от 1/2 до 1/10 от нынешнего.
Механизм «шлагбаумов» по умолчанию включен
Это опция, обеспечивающая целостность файловой системы ценой некоторой потери производительности (её можно отключить). Код файловой системы обязан перед созданием записи фиксации журнала быть абсолютно уверенным, что вся информация о транзакции помещена в журнал. Просто делать запись в правильном порядке недостаточно; современные диски имеют кэш большого объёма и меняют порядок записи для оптимизации производительности. Поэтому файловая система обязана явно сообщить диску о необходимости записать все журнальные данные на носитель перед созданием записи фиксации; если сначала будет создана запись фиксации, журнал может быть повреждён. Блокирующая система ввода-вывода ядра предоставляет такую возможность благодаря использованию механизма «шлагбаумов» (barriers); проще говоря, «шлагбаум» запрещает запись любых блоков, посланных после него, до того момента, как всё, что было прислано перед «шлагбаумом», будет перенесено на носитель. При использовании «шлагбаумов» файловая система может гарантировать, что всё, что находится на диске, целостно в любой момент времени.
2. Структура группы блоков
Каждая группа блоков состоит из следующих частей: суперблок, описание группы, резервные блоки, битовая карта блоков, битовая карты индексных дескрипторов, таблица индексных дескрипторов, блоки данных (таблица 1).
Суперблок в линуксе
Что такое суперблок в Линуксе. Попробуем разобраться на примере файловой системы ext(2|3|4), которая используется в линуксе по-умолчанию. Но для начала рассмотрим несколько простых понятий
Блок файловой системы
После форматирования диска или раздела сектора на диске разделены на небольшие группы. Такая группа секторов называется блоком. Размер блока может быть разным и задается как параметр ключа команды форматирования. Например
Размер блока может быть разным. Это зависит от типа файловой системы
При выборе размера блока нужно учесть ряд моментов
Размер блока влияет на скорость чтения/записи с диска. Представим себе файл размеров в несколько сот мегабайт, который считывается с диска блоками по 1Кб. Тот же файл будет считываться быстрее если размер блока файловой системы будет 4Кб или 8Кб. Это ясно. Поэтому при форматировании имеет смысл задать блок большего размера, если планируется использовать файлы большого размера
Также верно и обратное утверждение. В случае хранения небольших файлов лучше использовать блоки минимального размера
Ядро Linux работает с размером блока файловой системы, а не с размером сектора диска (обычно 512 байт). Важно понимать, что размер блока файловой системы не может быть меньше размера сектора диска и всегда будет кратным ему. Также ядро ожидает, что размер блока файловой системы будет меньше или равно размеру системной страницы
Размер системной страницы можно увидеть выполнив команду
Группы блоков файловой системы
Блоки, о которых мы говорили ранее обьеденяются в группы блоков, что позитивно отражается на операциях чтения/записи так как уменьшается время чтения/записи больших обьемов данных
Файловая система EXT разбивает все доспупное пространство на группы блоков равного размера. Эти группы располагаются последовательно, одна за другой
Загрузочный блок | Группа блоков 1 | Группа блоков 2 | Группа блоков 2 | Группа блоков 3 |
Количество блоков в группе неизменно и может быть расчитано по формуле
Взглянем на вывод команды mke2fs
Отметим то, о чем говорили выше
Также видны блоки в которых хранятся резервные копии суперблока
Так что же такое суперблок?
Самым простым определением суперблока могло бы быть следующее утверждение
Суперблок — это блок в котором хранятся метаданные файловой системы
Аналогично тому, как i-ноды хранят метаданные о файлах, суперблок хранит метаданные о файловой ситеме. Если вдруг суперблок поврежден, то не возможно будет примонтировать файловую систему. Обычно при загрузке система проверяет суперблок и при необходимости исправляет его, что в результате приводит к корректному монтированию файловых систем
Некоторые данные, которые хранятся в суперблоке. Например
Основная копия суперблока хранится в самой первой группе блоков. Она названа основной, потому что считывается системой в процессе монтирования файловой системы. Так как отсчет блоковых групп начинается с 0 то можно говорить о том, что суперблок хранится в начале блоковой группы 0
Суперблок весьма критичен для файловой системы. Поэтому в каждой блоковой группе есть копии суперблока. Это дает нам право думать, что поврежденный суперблок будет восстановлен всякий раз, когда это будет необходимо
Может показаться, что наличие в каждой блоковой группе резервных копий суперблока приводит к потреблению большого дискового пространства. Для этого в последних версиях систем была реализована функция «sparse_super» целью которой было создание резервных копий в группе блоков 0, 1, 3, 5, 7
Как увидеть, что хранится в суперблоке?
Для этого воспользуемся командой dumpe2fs
Еще один вывод команды показывает информацию о суперблоке
Как восстановить поврежденный суперблок?
Для начала нужно проверить файловую систему утилитой fsck
В случае если fsck обнаружила ошибку чтения суперблока можно попробовать сделать следующее:
Для начала определим где расположены резервные копии суперблока. Для этого выполняем
Далее восстановливаем суперблок из бекапа при помощи e2fsck
В данном случае в блоке 819200 хранится резервная копия суперблока. После применения команды пробуем снова монтировать файловую систему. Либо как вариант использовать ключ sb команды mount, который указывает на расположение копии суперблока
В данном случае считываем копию суперблока из блока 819200
Системный администратор. В сисадминстве с 2000 года. Участник Хабр Q&A и cyberforum
Экстенты, файлы, суперблоки. Как работают файловые системы ext3 и ext4 и как в них восстанавливать данные
Содержание статьи
В 2006 году вышла в свет книга Криса Касперски «Восстановление данных», которая быстро стала бестселлером. Сейчас эта книга готовится к переизданию. Мы публикуем отрывок из этой книги, посвященный восстановлению данных в файловых системах ext.
Ошибочное удаление файлов в *NIX — это достаточно распространенное явление, наверное, даже более частое, чем в мире Microsoft. Под Windows большинство файловых операций выполняется вручную с помощью проводника или других интерактивных средств типа FAR или Total Commander. Интерактивные среды есть и в Linux (KDE, GNOME, XFCE…), но немалая часть фанатов Linux — поклонники командной строки. Командная же строка — это регулярные выражения и скрипты, то есть автоматизированные средства управления — мощные, удобные и, при неправильном использовании, разрушительные. Малейшая небрежность — и можешь навсегда попрощаться со своими файлами!
Перефразируя Булгакова, можно сказать: мало того что файл смертен, так он еще и внезапно смертен! Беда никогда не предупреждает о своем приходе, и администратору приходится быть постоянно начеку. Несколько секунд назад все было хорошо: цвела весна, винчестер оживленно стрекотал всеми своими головками, администратор отхлебывал кофе из черной кружки с надписью root, как вдруг сотни гигабайт ценнейших данных внезапно разлетелись на мелкие осколки. Все силы брошены на разгребание завалов и спасение всех, кого еще можно спасти.
Доступность исходных текстов драйвера файловой системы значительно упрощает исследование ее внутренней структуры, которая, кстати говоря, очень проста. Поэтому восстановление данных на разделах ext2/3/4 — задача тривиальная.
Знакомьтесь! Семейство расширенных файловых систем
Изначально Linux был чем‑то вроде вольного пересказа ОС Minix, разработка велась под ней же, и работали первые версии Linux на файловой системе Minix. Называлась та незамысловато — MINIX file system — и, в свою очередь, была вдохновлена файловой системой UNIX — UFS. Но, поскольку сама Minix разрабатывалась скорее в учебных целях, ее файловая система не обладала широкими возможностями. Например, размер раздела не мог превышать 64 Мбайт, а максимальная длина имени файла — 14 или 30 символов в зависимости от версии. Чтобы преодолеть такие ограничения, начали разрабатывать собственную ФС для Linux.
Немного об истоках
Новая файловая система расширяла возможности MINIXfs, за что, видимо, и получила название extended filesystem. Первая реализация расширенной файловой системы, ext fs, увидела свет в 1992 году в ядре Linux версии 0.96c. Теперь приверженцы Linux были ограничены двумя гигабайтами для раздела, а файлы могли иметь имя длиной до 255 символов. Тем не менее эта ФС была все еще сравнительно проста, поэтому дальнейшее ее развитие не заставило себя долго ждать. Примерно в это же время, кстати, в Linux появился такой уровень абстракции, как виртуальная файловая система (VFS), облегчающий добавление поддержки новых ФС в ядро.
С появлением через пару лет ext2 максимальные размеры файла и файловой системы возросли до 16 Гбайт и 2 Тбайт соответственно (при размере блока 1 Кбайт). Часть блоков (обычно 5%) теперь резервировалась под рут, не позволяя обычным пользователям заполнить весь раздел без остатка. Тогда эта ФС стала практически стандартом де‑факто на линуксах, а ее реализации, говорят, были и под NT.
Поколение ext3
Третья расширенная файловая система (Third extended file system, ext3) появилась почти двадцать лет назад в одной из версий Linux 2.4.14. Она во многом напоминает свою предшественницу, ext2, но отличается поддержкой журналирования (в терминологии NTFS — транзакций). В отличие от ext2fs, она намного бережнее относится к массиву каталогов, хотя, как мы увидим чуть далее, нам это не сильно поможет.
Продолжение доступно только участникам
Вариант 1. Присоединись к сообществу «Xakep.ru», чтобы читать все материалы на сайте
Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее