8 Производительность, утилиты и общие ключевые вопросы 25


– /home должен содержать ”медленно изменяющиеся” данные.–



Скачать 255.48 Kb.
Pdf просмотр
страница2/3
Дата22.11.2016
Размер255.48 Kb.
Просмотров839
Скачиваний0
ТипРеферат
1   2   3
/home должен содержать ”медленно изменяющиеся” данные.
/var должен содержать быстро изменяющиеся данные, включая спул почты,
содержимое баз данных и логи web сервера.
Идея использования нескольких отдельных разделов такова если, по некоторой странной причине, при ошибках человека, пропадении питания, или ошибках операционной системы происходят повреждения - они ограничиваются одним разделом. Типичный случай - исчезновение питания при записи на диск. Это должно привести к повреждению файловой системы, что должно быть исправле- но программой fsck при следующей загрузке. Если даже fsck делает восстанов- ление без создания дополнительных повреждений этим восстановлением, можно утешиться тем, что любые повреждения были ограничены одним разделом. В
другом типичном случае системный администратор делает ошибку в процессе операции восстановления, что приводит к стиранию и разрушению всех данных.
Разделы могут помочь ограничить влияние ошибок оператора.
• Разумно обдумать размещение разделов /usr или /opt. В общем, /opt и /home
- лучший выбор для RAID-5 разделов, если есть еще диски. Предостережение:
НЕ
помещайте /usr в RAID-5 раздел. В случае серьезного отказа, вы можете обнаружить, что не можете примонтировать /usr, и необходимый набор утилит на нем (таких как сетевые утилиты или компилятор.) С RAID-1, если произошел отказ, и Вы не можете заставить RAID работать, Вы можете, по крайней мере,
смонтировать одно из двух зеркал. Вы не можете сделать это с любым другим уровнем RAID (RAID-5, striping, или линейным соединением).
Итак, чтобы завершить ответ на вопрос:
• устанавливаем ОС на диск 1, раздел 1. Не монтируем любые другие разделы.
• устанавливаем по инструкции RAID.
• конфигурирует md0 и md1.
• убеждаемся, что знаем что делать в случае отказа! Делаем ошибку администрато- ра сейчас и не ждем реального кризиса. Эксперимент! (мы выключаем питание при дисковой активности — это нехорошо, но показательно).
• делаем несколько плохих mount/copy/unmount/rename/reboot для записи /var на /dev/md1. Делайте старательно, это не опасно.
• наслаждайтесь!
2. В: Какое различие между mdadd, mdrun, и т.д. командами, и raidadd, raidrun командами?
О
: Имена утилит сменились начиная с релиза 0.5 пакета raidtools. md схема име- нования использовалась в 0.43 и более старых версиях, в то время как raid исполь- зуется в 0.5 и более новых версиях.

3. Установка и установочные соображения
9 3. В: Я хочу запустить RAID-linear/RAID-0 на 2.0.34 ядре . Я не хочу применять raid патчи, так как они не нужны для RAID-0/linear. Где я могу взять raid-утилиты для управления?
О
: Это трудный вопрос, в самом деле, новый пакет raid утилит при сборке тре- бует установленных патчей RAID-1,4,5. Я не знаю ни одной предкомпилированной двоичной версии raid утилит, которые доступны на текущий момент. Однако, экс- перименты показывают, что бинарники raid утилит, когда скомпилированы с ядром
2.1.100, кажется хорошо работающими при создании RAID-0/linear раздела под 2.0.34.
Смельчаки спрашивали об этом, и я временно поместил бинарники mdadd, mdcreate,
и т.д. на http://linas.org/linux/Software-RAID/ Вы должны взять man страницы, и т. д.
с обычного пакета утилит.
4. В: Могу ли я strip/зеркализировать корневой раздел (/)? Почему я не могу загружать Linux прямо с md диска?
О
: И LILO и Loadlin требуют не stripped/mirrored раздел для считывания образа ядра. Если Вы хотите strip/зеркализировать корневой раздел (/), вы должны создать не striped/mirrored раздел для хранения ядра(ядер). Обычно, этот раздел называют
/boot
. Тогда Вы должны либо использовать начальную поддержку виртуального дис- ка(initrd), или патчи от Harald Hoyer <HarryH@Royal.Net> которые позволяют исполь- зовать stripped раздел, как корневой раздел. (Эти патчи - стандартная часть последних ядер серии 2.1.x)
Существуют несколько подходов, которые могут быть использованы. Один подход детально документирован в Bootable RAID mini-HOWTO: <
ftp://ftp.bizsystems.
com/pub/raid/bootable-raid
>
Как альтернативу, используйте mkinitrd для построения образа ramdisk, как по- казано ниже.
Edward Welbon <welbon@bga.com> написал:
• ... все, что нужно - скрипт для управления установкой. Для монтирования md файловой системы как корневой, главное - построить начальный образ файловой системы, который содержит необходимые модули и md утилиты для запуска md.
У меня есть простой скрипт, который это делает.
• Для загрузочной среды, у меня есть маленький дешевый SCSI диск (170MB я получил его за 20долларов ). Этот диск работает на AHA1452, им также может быть недорогой IDE диск на родном IDE интерфейсе. От этого диска не требуется скорости, так как он предназначен, в основном, для загрузки.
• На диске создана маленькая файловая система содержащая ядро и образ initrd.
Начальной файловой системы должно хватать для загрузки модуля драйвера raid
SCSI устройства и запуска raid раздела, который будет корневым. Тогда я делаю echo 0x900 > /proc/sys/kernel/real-root-dev
(0x900 для /dev/md0) и выхожу из linuxrc. Далее загрузка продолжается обыч- но.
• Я собрал большинство функций как модули кроме драйвера AHA1452, который будит файловую систему initrd. Таким образом у меня очень маленькое ядро.
Этот метод простой и надежный, я делаю так с 2.1.26 и никогда не было проблем,
которых не мог бы запросто решить. Файловая система даже выжила несколько
2.1.4[45] тяжелых разрушений без реальных проблем.
• В одно время у меня были размечены raid диски так, что начальные цилиндры первого raid диска содержали ядро и начальные цилиндры второго raid диска со- держали образ начальной файловой системы, вместо этого я использовал началь- ные цилиндры raid дисков для подкачкм, так как они более быстрые цилиндры
(зачем терять их на загрузку?).

3. Установка и установочные соображения
10
• Хорошо иметь недорогой диск для загрузки, так как с него просто загрузиться и,
при необходимости, можно использовать как восстановительный диск. Если Вы интересуетесь, Вы можете взглянуть на скрипт, который создает мой начальный образ ramdisk и потом запускает LILO.
<
http://www.realtime.net/welbon/initrd.md.tar.gz
>
Его достаточно для того, чтобы обрисовать картину. Он не очень хорош, и, ко- нечно, можно создать более маленький образ файловой системы для начального ramdisk. Было бы проще создать его более действенным. Но он использует LILO
как есть. Если вы сделаете любые усовершенствования, пожалуйста, отправьте копию мне. 8-)
5. В: Я слышал, что я могу запустить зеркализацию поверх striping. Это правда? Могу ли я запускать зеркализацию поверх петлевого устройства?
О
: Да, но не наоборот. Вы можете поместить stripe поверх нескольких дисков, и затем строить зеркализацию на базе этого. Однако, striping не может быть помещен на зеркало.
Короткое техническое объяснение этого - особенностью linear и stripe является использования ll_rw_blk процедуры для доступа. ll_rw_blk процедура отображает дисковые устройства и сектора, но не блоки. Блочные устройства могут быть разме- щены одно поверх другого; но устройства, которые делают прямой, низкоуровневый доступ к дискам, такие как ll_rw_blk, не могут.
На текущий момент (Ноябрь 1997) RAID не может быть создан на петлевом
(loopback) устройстве, однако возможно, это скоро будет исправлено.
6. В: У меня есть два маленьких диска и три больших диска. Могу ли я соединить два маленьких диска в RAID-0, и затем создать RAID-5 из этого и больших дисков?
О
: Сейчас (Ноябрь 1997), для массива RAID-5, нет. Сейчас, это можно сделать только для RAID-1 повер объединенных дисков.
7. В: Какая разница между RAID-1 и RAID-5 для двух дисковой конфигурации (имеется в виду разница между массивом RAID-1 построенном на двух дисках, и массивом RAID-5 построен- ном на двух дисках)?
О
: Нет разницы в емкости. Также нельзя добавить диски ни в один из массивов для увеличения емкости (для деталей, смотрите вопрос ниже).
RAID-1 предоставляет преимущество в производительности чтения: драйвер RAID-
1 использует технологию распределенного чтения для одновременного чтения двух секторов, по одному с каждого устройства, это удваивает скорость считывания.
Драйвер RAID-5, хотя и содержит много оптимизаций, сейчас (Сентябрь 1997) не реализует то, что паритетный диск - фактически зеркальная копия диска с данными.
Таким образом, выполняется последовательное чтение данных.
8. В: Как я могу защититься от отказа двух дисков?
О
: Некоторые из алгоритмов RAID дают отказоустойчивость при отказе несколь- ких дисков, но на данный момент это не реализовано в Linux. Однако, программный
RAID Linux может защитить от множественных отказов дисков размещая массив по- верх массива. Например, девять дисков могут быть использованы для создания трех массивов raid-5. Затем, эти три массива могут быть объединены в один массив RAID-
5. Фактически, этот тип конфигурации защищает от отказа трех дисков. Заметьте,
что много дискового пространства ”тратится” на избыточность информации.

3. Установка и установочные соображения
11
Для NxN массива raid-5,
N=3, 5 из 9 дисков используется для паритета (=55%)
N=4, 7 из 16 дисков
N=5, 9 из 25 дисков
N=9, 17 из 81 дисков (=
20&процентов;)
В общем, массив MxN будет использовать M+N-1 дисков на паритет. Наименьшее количество пространства "теряется", когда M=N.
Другая альтернатива создать массив RAID-1 с тремя дисками. Заметьте, что все три диска содержат идентичные данные, и 2/3 пространства ”теряется”.
9. В: Я хочу понять, существует-ли что-то типа fsck: если раздел не был правильно демонтиро- ван, fsck запускается и исправляет файловую систему более 90% времени. Так как машина способна исправлять это сама с помощью ckraid --fix, почему не автоматизировать это?
О
:
Это возможно сделать добавлением следующие строки в
/etc/rc.d/rc.sysinit
:
mdadd /dev/md0 /dev/hda1 /dev/hdc1 || {
ckraid --fix /etc/raid.usr.conf mdadd /dev/md0 /dev/hda1 /dev/hdc1
}
или mdrun -p1 /dev/md0
if [ $? -gt 0 ] ; then ckraid --fix /etc/raid1.conf mdrun -p1 /dev/md0
fi
Перед предоставлением более полного и надежного скрипта, рассмотрим теорию операций.
Gadi Oxman написал: При неправильном завершении, Linux может быть в одном их следующих состояний:
• При возникновении аварийного завершения дисковый кеш в памяти был син- хронизирован с RAID набором; потерь данных нет.
• При возникновении аварийного завершения в памяти дискового кеша было более новое содержимое, чем в RAID наборе; в результате повреждена файловая систе- ма и возможно потеряны данные. Это состояние может быть далее разделено на два других состояния:

При аварийном завершении Linux записывал данные.

При аварийном завершении Linux не записывал данные.
Допустим мы используем массив RAID-1. В (2a), может случиться, что перед авари- ей небольшое количество блоков данных было успешно записано только на несколько из зеркал, таким образом при следующей загрузке, зеркала уже не будут идентич- ными.
Если мы проигнорировали разницу в зеркалах, the raidtools-0.36.3 код балансиров- ки чтения может выбрать для чтения блоки из любого зеркала, что приведет к про- тиворечивому поведению (например, вывод e2fsck -n /dev/md0 будет отличаться от запуска к запуску).
Так как RAID не защищает от неправильного завершения, обычно нет никакого
”целиком корректного” пути для устранения разницы в зеркалах и повреждений файловой системы.

3. Установка и установочные соображения
12
Например, по умолчанию ckraid --fix будет выбирать содержимое первого дей- ствующего зеркала и обновлять другие зеркала. Однако, в зависимости от точного времени аварии, данные на другом зеркале могут быть более свежие, и мы можем пожелать использовать их как источник для восстановления зеркал, или, возможно,
использовать другой метод восстановления.
Следующий скрипт реализует одну из самых здравых последовательностей загруз- ки. В частности, он принимает меры предосторожности длинными, повторяющимися ckraid
-ов при не совместных дисках, контроллерах, или драйверах контроллеров дисков. Модифицируйте его, для соответствия своей конфигурации, и скопируйте в rc.raid.init
. Затем вызовите rc.raid.init после проверки fsck-ом монтирования rw корневого раздела, но перед проверкой fsck-ом оставшихся разделов. Убедитесь,
что текущий каталог в путях поиска (переменная PATH).
mdadd /dev/md0 /dev/hda1 /dev/hdc1 || {
rm -f /fastboot
# force an fsck to occur ckraid --fix /etc/raid.usr.conf mdadd /dev/md0 /dev/hda1 /dev/hdc1
}
# if a crash occurs later in the boot process,
# we at least want to leave this md in a clean state.
/sbin/mdstop /dev/md0
mdadd /dev/md1 /dev/hda2 /dev/hdc2 || {
rm -f /fastboot
# force an fsck to occur ckraid --fix /etc/raid.home.conf mdadd /dev/md1 /dev/hda2 /dev/hdc2
}
# if a crash occurs later in the boot process,
# we at least want to leave this md in a clean state.
/sbin/mdstop /dev/md1
mdadd /dev/md0 /dev/hda1 /dev/hdc1
mdrun -p1 /dev/md0
if [ $? -gt 0 ] ; then rm -f /fastboot
# force an fsck to occur ckraid --fix /etc/raid.usr.conf mdrun -p1 /dev/md0
fi
# if a crash occurs later in the boot process,
# we at least want to leave this md in a clean state.
/sbin/mdstop /dev/md0
mdadd /dev/md1 /dev/hda2 /dev/hdc2
mdrun -p1 /dev/md1
if [ $? -gt 0 ] ; then rm -f /fastboot
# force an fsck to occur ckraid --fix /etc/raid.home.conf mdrun -p1 /dev/md1
fi
# if a crash occurs later in the boot process,
# we at least want to leave this md in a clean state.
/sbin/mdstop /dev/md1
# OK, just blast through the md commands now.
If there were

4. Восстановление ошибок
13
# errors, the above checks should have fixed things up.
/sbin/mdadd /dev/md0 /dev/hda1 /dev/hdc1
/sbin/mdrun -p1 /dev/md0
/sbin/mdadd /dev/md12 /dev/hda2 /dev/hdc2
/sbin/mdrun -p1 /dev/md1
В дополнение к указанному, Вы должны создать rc.raid.halt, который должен выглядеть как показано ниже:
/sbin/mdstop /dev/md0
/sbin/mdstop /dev/md1
Модифицируйте оба rc.sysinit и init.d/halt для включения этого в место,
где файловая система уже демонтирована при halt/reboot. (Заметьте что rc.sysinit демонтирует и перезагружает если fsck завершился с ошибкой.)
10. В: Могу я установить одну половину RAID-1 зеркала на один диск, который есть у меня сейчас и затем позже взять другой диск и просто его добавить?
О
: С текущими утилитами - нет, во всяком случае не простым способом. В частно- сти, вы не можете просто скопировать содержимое одного диска на другой и затем их спаровать. Это потому, что драйвера RAID используют часть пространства в конце раздела для размещения суперблока. Это слегка уменьшает количество пространства,
доступного для файловой системы; если Вы просто попробуете принудительно поста- вить RAID-1 на раздел с существующей файловой системой, raid суперблок переза- пишет часть файловой системы и обрубит данные. Так как ext2fs файловая система разбрасывает фалы по разделу случайным образом (для избежания фрагментации),
есть хороший шанс, что файл будет лежать в самом конце раздела перед окончанием диска.
Если Вы сообразительны, я предлагаю Вам вычислить сколько места нужно под суперблок RAID, и сделать вашу файловую систему немного короче, оставив место на перспективу. Но тогда, если вы такой умный, Вы должны также быть способны модифицировать утилиты для автоматизации этого процесса. (Утилиты не так уж сложны).
Заметка:
Внимательный читатель заметит, что следующий трюк может сработать;
я не пытался проверить это: Сделайте mkraidс /dev/null, как одним из устройств.
Тогда mdadd -rс только одним, истинным диском (не делайте mdadd /dev/null).
mkraid должен быть успешно создать raid массив, когда mdadd шаг выполняется - файловая система запущена в "деградированном"режиме, как если бы один из дисков отказал.
4
Восстановление ошибок
1. В: У меня установлен RAID-1 (зеркализация), и у меня пропало питание во время дисковой активности. Что мне теперь делать?
О
: Избыточность уровней RAID предназначена для защиты от отказа диска, не от отказа питания.
Есть несколько путей восстановления в этой ситуации.

4. Восстановление ошибок
14
• Метод (1): Использовать raid утилиты. Он может быть использован для синхрони- зации raid массивов. Он не устраняет повреждение файловой системы; после син- хронизации raid массивов, файловая система все еще нуждается в исправлении с помощью fsck. Raid массивы могут быть проверены ckraid /etc/raid1.conf
(для RAID-1, или, /etc/raid5.conf, и т.д..)
Запуск ckraid /etc/raid1.conf --fix выберет оин один диск из дисков массива (обычно первый), для использования его в качестве главной ко- пии, и копирования его блоков на другие диски зеркала. Для обозначе- ния диска, который должен быть использован как главный, вы можете ис- пользовать --force-source флаг: например, ckraid /etc/raid1.conf --fix
--force-source /dev/hdc3
. Комманда ckraid может быть безопасно запущена без опции --fix для проверки неактивного RAID массива без внесения измене- ний. Если Вы удовлетворены предполагаемыми изменениями, примените опцию
--fix
• Метод (2): Параноидальный, длительный по времени, не намного лучше, чем первый путь. Представим двух-дисковый массив RAID-1, состоящий из разделов
/dev/hda3
и /dev/hdc3. Вы можете попробовать следующее:
(a) fsck /dev/hda3
(b) fsck /dev/hdc3
(c) Решите, который из двух разделов содержит меньше ошибок, или где проще восстановление, или на котором находятся нужные Вам данные. Выберите один, только один, для вашей новой “главной” копии. Предположим Вы вы- брали /dev/hdc3.
(d) dd if=/dev/hdc3 of=/dev/hda3
(e) mkraid raid1.conf -f --only-superblock
Вместо последних двух шагов, Вы можете запустить ckraid /etc/raid1.conf
--fix --force-source /dev/hdc3
, что будет быстрее.
• Метод (3): Версия для ленивых людей. Если Вы не хотите ждать завершения дол- гой проверки fsck, просто пропустите первые три шага выше, и начинайте прямо с последних двух шагов. Только после завершения запустите fsck /dev/md0.
Метод (3) на самом деле замаскированный метод (1).
В любом случае, вышеуказанные шаги только синхронизируют массив raid. Для файловых систем возможно все еще необходимо устранение ошибок: для этого, нуж- но запустить fsck на активном, но не смонтированном устройстве.
С трех-дисковым массивом RAID-1, есть много вариантов, таких как использова- ние двух дисков для выбора ответа. Утилиты автоматизации этого пока (Сентябрь 97)
не существуют.
2. В: Если у меня установлен RAID-4 или RAID-5 (паритетный), и пропало питание во врем ак- тивности диска. Что мне делать?
О
: Избыточность уровней RAID предназначена для защиты от отказов дисков, а не от отказов питания.
Так как диски в массиве RAID-4 или RAID-5 не содержат файловой системы, ко- торую fsck может читать, есть несколько опций восстановления. Вы не можете ис- пользовать fsck для предварительной проверки и/или восстановления; Вы должны использовать сначала ckraid. Комманда ckraid может быть безопасно запущена без опции --fix для проверки неактивного массива RAID без внесения любых изме- нений. Когда Вы удовлетворены предложенными изменениями, примените опцию
--fix
Если Вы хотите, Вы можете попробовать обозначить один из дисков как ”отказав- ший диск”. Делайте это с флагом --suggest-failed-disk-mask.

4. Восстановление ошибок
15
Только один бит должен быть установлен в флаге: RAID-5 не может восстанавли- вать два отказавших диска. mask - битовая маска: итак:
0x1 == первый диск
0x2 == второй диск
0x4 == третий диск
0x8 == четвертый диск, и т.д.
Или Вы можете выбрать модификацию секторов с паритетом, используя флаг
--suggest-fix-parity flag. Это заново вычислит паритет из других секторов.
Флаг --suggest-failed-dsk-mask и --suggest-fix-parity может быть без- опасно использован для проверки. Никаких изменений не будет сделано, если не указан флаг --fix. Итак, Вы можете экспериментировать с различными возможны- ми вариантами восстановления.
3. В: Мое RAID-1 устройство, /dev/md0 состоит из двух разделов жестких дисков: /dev/hda3
и /dev/hdc3. Недавно, диск с /dev/hdc3 отказал, был заменен на новый диск. Мой луч- ший друг, который не разбирается в RAID, сказал, что сейчас правильно сделать ”dd if=/dev/hda3 of=/dev/hdc3
”. Я попробовал это, но все по прежнему не работает.
О
: Вы должны отстранить Вашего друга от компьютера. К счастью, не произошло никаких серьезных повреждений. Вы можете все восстановить запустив:
mkraid raid1.conf -f --only-superblock
При запуске dd, были созданы две идентичные копии раздела. Это почти правиль- но, исключая то, что расширение ядра RAID-1 предполагает различие в суперблоке.
Итак, когда Вы пробуете активировать RAID, программа обратит внимание на про- блему, и деактивирует один из двух разделов. Пересоздав суперблок, вы должны получить полностью рабочую систему.
4. В: У моей версии mkraid нет флага --only-superblock. Что мне делать?
О
: В новых утилитах убрали поддержку этого флага, заменив его флагом
--force-resync
. Как мне сообщили с последней версией утилит и программ ра- ботает такая последовательность:
umount /web (что было смонтировано на /dev/md0)
raidstop /dev/md0
mkraid /dev/md0 --force-resync --really-force raidstart /dev/md0
После этого, cat /proc/mdstat должно доложить resync in progress, и далее можно mount /dev/md0 с этого места.
5. В: Мое устройство RAID-1, /dev/md0 состоит из двух разделов: /dev/hda3 and /dev/hdc3.
Мой лучший друг(подруга?), который не разбирается в RAID, запустил без меня fsck на
/dev/hda3
, и сейчас RAID не работает. Что я должен делать?
О
: Вы должны пересмотреть свое понятие - “лучший друг”. В общем, fsck не должна запускаться на отдельных разделах массива RAID. Предположим ни один из разделов тяжело не поврежден, потерь данных нет, и RAID-1 устройство может быть восстановлено так:
(a) делаем резервную копию файловой системы на /dev/hda3
(b) dd if=/dev/hda3 of=/dev/hdc3
(c) mkraid raid1.conf -f --only-superblock
Это должно вернуть ваше зеркало к работе.

4. Восстановление ошибок
16 6. В: Почему сказанное выше работает как восстанавливающая процедура?
О
: Потому что каждый компонент раздела в RAID-1 зеркале является просто точ- ной копией файловой системы. В крайнем случае, зеркализация может быть запреще- на, и один из разделов может быть смонтирован и безопасно запущен как обычная,
не-RAID файловая система. Если Вы готовы перезапуститься используя RAID-1, то демонтируйте раздел, и следуйте вышеприведенным инструкциям для восстановле- ния зеркала. Заметьте, что вышеуказанное работает ТОЛЬКО для RAID-1, и ни для какого другого уровня.
Возможно, Вам удобнее изменить направление копирования: копировать с диска,
который был нетронут на тот, который был. Просто будьте уверены, что после этого запускаете fsck на md.
7. В: Я смущен предыдущим вопросом, но еще не убежден. Безопасно ли запускать fsck
/dev/md0
?
О
: Да, безопасно запускать fsck на устройствах md. Фактически, это единственное
безопасное место запуска fsck.
8. В: Если диск медленно слабеет, будет очевидно который из них? Я беспокоюсь чтобы этого не случилось, и эта неразбериха не привела к каким-либо опасным решениям системного администратора.
О
: Как только диск откажет, драйвер нижнего уровня вернет код ошибки драйверу
RAID. RAID драйвер пометит этот диск в суперблоках RAID хороших дисков как
“плохой”(bad) (таким образом позже мы сможем узнать, которые из дисков хорошие,
а которые нет), и продолжит работу RAID на оставшихся действующих зеркалах.
Это, конечно, предполагает, что диск и драйвер нижнего уровня в состоянии об- наружить ошибки чтения/записи и не будут, к примеру, молча искажать данные. Это справедливо для текущих дисков (схем обнаружения ошибок используемых в них),
и основы работы RAID.
9.


Поделитесь с Вашими друзьями:
1   2   3


База данных защищена авторским правом ©nethash.ru 2019
обратиться к администрации

войти | регистрация
    Главная страница


загрузить материал