1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/wizardforcel-llthw-zh

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
ex22.md 12 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
gitlife-traslator Отправлено 25.11.2024 03:02 8398775

Упражнение 22: Файловая система: перемещение данных, tar, dd

Теперь пришло время самостоятельно посмотреть, что всё в Linux — это просто файл.

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

Сейчас вы узнаете, как манипулировать данными.

Как это сделать

  1. tar -czvf root.tgz /opt/root/ — создать архив файлов и папок из каталога /opt/root с именем root.tgz.

  2. tar -tzvf root.tgz — вывести список файлов и каталогов в архиве root.tgz, чтобы убедиться, что они были правильно заархивированы.

  3. cd /tmp — перейти в каталог /tmp.

  4. tar -zxvf ~/root.tgz — извлечь файлы и папки из архива root.tgz в текущий каталог.

  5. ls -al — вывести подробную информацию о файлах и папках в текущем каталоге.

  6. dd_if=$(mount | grep /tmp | cut -d ' ' -f 1) && echo $dd_if — получить имя устройства, на котором смонтирован каталог /tmp, и вывести его.

  7. sudo dd if=$dd_if of=~/tmp.img bs=10M — скопировать содержимое устройства dd_if в файл tmp.img.

  8. cd && ls -alh — вернуться в домашний каталог и вывести подробную информацию о файлах и папках.

  9. sudo losetup /dev/loop1 ~/tmp.img && sudo mount /dev/loop1 /mnt/ — подключить файл tmp.img к устройству loopback /dev/loop1 и смонтировать его в каталог /mnt.

  10. ls -al /mnt — вывести информацию о содержимом каталога /mnt, который теперь содержит данные из файла tmp.img.

  11. sudo umount /mnt && sudo losetup -d /dev/loop1 — размонтировать каталог /mnt и отключить устройство loopback /dev/loop1.

  12. sudo umount $dd_if && sudo mkfs.ext3 $dd_if — размонтировать устройство dd_if и отформатировать его как файловую систему ext3.

  13. new_uuid=$(sudo tune2fs -l $dd_if | awk '/UUID/{print $3}') && echo $new_uuid — получить новый UUID для устройства dd_if.

  14. grep '/tmp' /etc/fstab — найти строку с /tmp в файле /etc/fstab.

  15. sed "s/^UUID=.*\/tmp\s\+ext3\s\+defaults\s\+[0-9]\s\+[0-9]\s\?/UUID=$new_uuid \/tmp ext3 defaults 0 2/" /etc/fstab — заменить старый UUID на новый в строке с /tmp в /etc/fstab.

Теперь используйте sudo tune2fs -l и sudo blkid для проверки вывода. Если замена UUID в /etc/fstab выглядит нормально, выполните фактическую замену.

  1. sudo sed -i'.bak' "s/^UUID=.*\/tmp\s\+ext3\s\+defaults\s\+[0-9]\s\+[0-9]\s\?/UUID=$new_uuid \/tmp ext3 defaults 0 2/" /etc/fstab — выполнить замену UUID в /etc/fstab, сохранив старую версию файла с расширением .bak.

  2. sudo mount -a && ls /tmp — перемонтировать все устройства и вывести содержимое каталога /tmp.

  3. sudo umount /tmp && pv ~/tmp.img | sudo dd of=$dd_if bs=10M — размонтировать /tmp и записать данные из tmp.img обратно на устройство dd_if.

  4. new_uuid=$(sudo tune2fs -l $dd_if | awk '/UUID/{print $3}') && echo $new_uuid — снова получить UUID для dd_if, чтобы проверить, изменился ли он после записи данных.

  5. sudo sed -i'.bak' "s/^UUID=.*\/tmp\s\+ext3\s\+defaults\s\+[0-9]\s\+[0-9]\s\?/UUID=$new_uuid \/tmp ext3 defaults 0 2/" /etc/fstab — ещё раз заменить UUID в /etc/fstab, если он изменился.

  6. sudo mount -a — перемонтировать все устройства.

  7. rm -v tmp.img — удалить файл tmp.img.

Введите y и нажмите <ENTER>.

Что вы увидите

В этом разделе представлен вывод команд, которые выполняются в ходе упражнения. 1024 Jul 3 08:29 drwxrwxrwt 2 root root 1024 Jul 3 08:41 .ICE-unix drwx------ 2 root root 12288 Jul 3 07:47 lost+found drwxr-xr-x 3 user1 user1 1024 Jul 5 03:24 opt -rw-r--r-- 1 root root 489 Jul 3 10:14 sources.list -r--r----- 1 root root 491 Jul 3 10:21 sudoers drwxrwxrwt 2 root root 1024 Jul 3 08:41 .X11-unix user1@vm1:$ sudo umount /mnt && sudo losetup -d /dev/loop1 user1@vm1:$ sudo umount $dd_if && sudo mkfs.ext3 $dd_if mke2fs 1.41.12 (17-May-2010) Файловая система label= Тип ОС: Linux Размер блока = 1024 (log = 0) Размер фрагмента = 1024 (log = 0) Шаг = 0 блоков, ширина полосы = 0 блоков 61752 индексных дескриптора, 246784 блока 12339 блоков (5,00%) зарезервировано для суперпользователя Первый блок данных = 1 Максимальное количество блоков файловой системы = 67371008 31 группа блоков 8192 блока на группу, 8192 фрагмента на группу 1992 индексных дескрипторов на группу Суперблоки хранятся в блоках: 8193, 24577, 40961, 57345, 73729, 204801, 221185

Запись таблиц индексных дескрипторов: выполнено Создание журнала (4096 блоков): выполнено Запись суперблоков и учётной информации файловой системы: выполнено

Эта файловая система будет автоматически проверяться каждые 27 монтирований или 180 дней, в зависимости от того, что наступит раньше. Используйте tune2fs -c или -i для переопределения. user1@vm1:$ new_uuid=$(sudo tune2fs -l $dd_if | awk '/UUID/{print $3}') && echo $new_uuid f8288adc-3ef9-4a6e-aab2-92624276b8ba user1@vm1:$ grep '/tmp' /etc/fstab

/tmp был на /dev/sda8 во время установки

UUID=011b4530-e4a9-4d13-926b-48d9e33b64bf /tmp ext3 по умолчанию 0 2 user1@vm1:~$ sed "s/^UUID=.*/tmp\s+ext3\s+defaults\s+[0-9]\s+[0-9]\s?/UUID=$new_uuid /tmp ext3 defaults 0 2/" /etc/fstab

/etc/fstab: статическая информация о файловой системе.

Используйте 'blkid', чтобы вывести универсальный уникальный идентификатор для устройства; это можно использовать с UUID = в качестве более надёжного способа называть устройства, который работает даже при добавлении и удалении дисков. См. fstab(5).

<файловая система> <точка монтирования> <тип> <параметры> <дамп> <пропуск>

proc /proc proc по умолчанию 0 0

/ был на /dev/sda1 во время установки

UUID=91aacf33-0b35-474c-9c61-311e04b0bed1 / ext3 ошибки = перемонтировать-ro 0 1

/home был на /dev/sda9 во время установки

UUID=e27b0efb-8cf0-439c-9ebe-d59c927dd590 /home ext3 по умолчанию 0 2

/tmp был на /dev/sda8 во время установки

UUID=f8288adc-3ef9-4a6e-aab2-92624276b8ba /tmp ext3 по умолчанию 0 2

/usr был на /dev/sda5 во время установки

UUID=9f49821b-7f94-4915-b9a9-ed9f12bb6847 /usr ext3 по умолчанию 0 2

/var был на /dev/sda6 во время установки

UUID=b7e908a1-a1cd-4d5c-bc79-c3a99d003e7c /var ext3 по умолчанию 0 2

swap был на /dev/sda7 во время установки

UUID=292981d7-5a17-488f-8d9a-176b65f45d46 none swap sw 0 0 /dev/scd0 /media/cdrom0 udf,iso9660 пользователь,noauto 0 0 sudo sed -i'.bak' "s/^UUID=.*/tmp\s+ext3\s+defaults\s+[0-9]\s+[0-9]\s?/UUID=$new_uuid /tmp ext3 defaults 0 2/" /etc/fstab sudo mount -a && ls /tmp user1@vm1:$ sudo umount /tmp && pv /tmp.img | sudo dd of=$dd_if bs=10M 241MB 0:00:04 [54,2 МБ/с] [===============================================================================================================>] 100% 0+1928 записей 0+1928 записей 252706816 байт (253 МБ) скопировано, 5,52494 с, 45,7 МБ/с user1@vm1:$ rm -v tmp.img rm: удалить защищённый от записи обычный файл tmp.img'? y удален tmp.img' user1@vm1:$ Вот перевод текста на русский язык:

Показываю, как работает изменённый /etc/fstab. Для этого используется регулярное выражение в качестве маски, которое определяет эту строку:

```
UUID=f8288adc-3ef9-4a6e-aab2-92624276b8ba /tmp ext3 defaults 0 2
```

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

  1. Используйте новый UUID для фактической замены старого UUID в /tmp.
  2. Подключите все файловые системы, описанные в /etc/fstab, и перечислите содержимое нового /tmp.
  3. Отключите новое подключение /tmp и восстановите старое /tmp из tmp.img.
  4. Получите старый UUID /tmp, который фактически совпадает с тем, что был до создания новой файловой системы, поскольку tmp.img является точной копией старого /tmp.
  5. Замените новый UUID на старый в /etc/fstab.
  6. Подключитесь ко всем файловым системам из /etc/fstab. Если эта команда не вызывает ошибок, всё должно быть в порядке. Поздравляем!
  7. Удалите tmp.img из своего домашнего каталога.

Дополнительное задание

  • Попробуйте подробно объяснить действие каждой команды. Возьмите лист бумаги и запишите всё. В man найдите все непонятные команды и параметры.
  • Это немного преждевременно, но почему вы можете удалить tmp.img, находящийся в вашем домашнем каталоге, от имени пользователя user1, учитывая, что tmp.img был создан пользователем root?

Опубликовать ( 0 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/wizardforcel-llthw-zh.git
git@api.gitlife.ru:oschina-mirror/wizardforcel-llthw-zh.git
oschina-mirror
wizardforcel-llthw-zh
wizardforcel-llthw-zh
master