NMT-200 ЧаВо

Завершение перехода с SATA на USB-flash

Статья WildFlexy от 16.09.2010
    Дамы и господа! Прошу принять во внимание, что нижеприведенные трюки выполняются профессионалами, и простой повтор телодвижений может привести к порче разделов с данными! Поэтому — думайте дважды, прежде чем повторить!

Ранее приложения стояли на SATA-диске, а потом я обзавелся USB-флешкой и продолжаю жить на ней. Так зачем мне копия устаревших Приложений NMT, старый том Java и swap-раздел? Сейчас все это изничтожим!

Кто у нас сейчас «главный» для Приложений? Это можно найти по синониму share, расположенному в корне /:

<strong>ls -al / | grep share</strong><br />
lrwxrwxrwx 1 root root 41 Sep 15 22:30 share -&gt; /opt/sybhttpd/localhost.drives/USB_DRIVE/

Понятно, мой том называется незатейливо - USB_DRIVE. Теперь выясним что это за устройство:

<strong>mount | grep USB_DRIVE</strong><br />
/dev/sdc1 on /opt/sybhttpd/localhost.drives/USB_DRIVE_C-1 type ext3 (rw,noatime,nodiratime,data=ordered)<br />
/dev/sdd3 on /opt/sybhttpd/localhost.drives/<strong>USB_DRIVE</strong> type ext3 (rw,noatime,nodiratime,data=ordered)

Угу — искомый «элемент» расположен на устройстве /dev/sdd
Посмотрим что на этой флешке творится вообще в плане нарезки на разделы:

<strong>fdisk -l /dev/sdd</strong><br />
&nbsp;<br />
Disk /dev/sdd: 16.0 GB, 16064184320 bytes<br />
7 heads, 37 sectors/track, 121140 cylinders<br />
Units = cylinders of 259 * 512 = 132608 bytes<br />
&nbsp;<br />
Device Boot Start End Blocks Id System<br />
/dev/sdd1 1 7542 976670+ 83 Linux<br />
/dev/sdd2 7543 22625 1953248+ 83 Linux<br />
/dev/sdd3 22626 121140 12757692+ 83 Linux<br />
sh-3.00# <strong>mount | grep /dev/sdd</strong><br />
/dev/sdd3 on /opt/sybhttpd/localhost.drives/USB_DRIVE type ext3 (rw,noatime,nodiratime,data=ordered)<br />
/dev/sdd2 on /persistfs type ext3 (rw,noatime,nodiratime,data=ordered)<br />
/dev/sdd1 on /nmt type ext3 (rw,noatime,nodiratime,data=ordered)<br />
sh-3.00# <strong>df -h | grep /dev/sdd</strong><br />
/dev/sdd3 12.0G 9.8G 2.2G 82% /opt/sybhttpd/localhost.drives/USB_DRIVE<br />
/dev/sdd2 1.8G 32.1M 1.8G 2% /persistfs<br />
/dev/sdd1 938.8M 70.1M 868.7M 7% /nmt<br />

То есть — 3 раздела — /nmt — под штатные Приложения NMT, /persistfs — под папку bdj, необходимую для BD-Java, и самый большой раздел, который и есть /share — под сторонние Приложения и прочую мелочевку.

А старый «носитель» Приложений NMT нынче у меня содержит всего один смонтированный раздел с простым именем SATA_DISK_B4:

<strong>mount | grep SATA_DISK_B4</strong><br />
/dev/sdb4 on /opt/sybhttpd/localhost.drives/SATA_DISK_B4 type ext3 (rw,noatime,nodiratime,data=ordered)

То есть физическое устройство с ним — это /dev/sdb:

<strong>fdisk -l /dev/sdb</strong><br />
&nbsp;<br />
Disk /dev/sdb: 640.1 GB, 640135028736 bytes<br />
255 heads, 63 sectors/track, 77825 cylinders<br />
Units = cylinders of 16065 * 512 = 8225280 bytes<br />
&nbsp;<br />
Device Boot Start End Blocks Id System<br />
/dev/sdb1 1 123 987966 83 Linux<br />
/dev/sdb2 124 186 506047+ 82 Linux swap<br />
/dev/sdb3 187 430 1959930 83 Linux<br />
/dev/sdb4 431 77825 621675337+ 83 Linux

Вот тут много лишнего, а точнее разделы с 1 по 3. Причем второй — swap, необходимость которого в результате долгих экспериментов так и не была доказана.

Стираем «иждивенцев»:

<strong>fdisk /dev/sdb</strong><br />
&nbsp<br />
The number of cylinders for this disk is set to 77825.<br />
There is nothing wrong with that, but this is larger than 1024,<br />
and could in certain setups cause problems with:<br />
1) software that runs at boot time (e.g., old versions of LILO)<br />
2) booting and partitioning software from other OSs<br />
(e.g., DOS FDISK, OS/2 FDISK)<br />
&nbsp;<br />
Command (m for help): <strong>m</strong><br />
Command Action
... <em>- я тут лишнее потер, чтоб не отвлекало</em><br />
d delete a partition<br />
...<br />
w write table to disk and exit<br />
&nbsp;<br />
Command (m for help): <strong>d</strong><br />
&nbsp;<br />
Partition number (1-4): <strong>1</strong><br />
&nbsp;<br />
Command (m for help): <strong>d</strong><br />
&nbsp;<br />
Partition number (1-4): <strong>2</strong><br />
&nbsp;<br />
Command (m for help): <strong>d</strong><br />
&nbsp;<br />
Partition number (1-4): <strong>3</strong><br />
&nbsp;<br />
Command (m for help): <strong>w</strong><br />
&nbsp;<br />
The partition table has been altered!<br />
&nbsp;<br />
Calling ioctl() to re-read partition table<br />
fdisk: WARNING: rereading partition table failed, kernel still uses old table: Device or resource busy

Как видим, Linux сопротивляется перезагрузке новой разметки разделов на ходу, хотя таблица разделов на диске уже уничтожена:

<strong>fdisk -l /dev/sdb</strong><br />
&nbsp;<br />
Disk /dev/sdb: 640.1 GB, 640135028736 bytes<br />
255 heads, 63 sectors/track, 77825 cylinders<br />
Units = cylinders of 16065 * 512 = 8225280 bytes<br />
&nbsp;<br />
Device Boot Start End Blocks Id System<br />
/dev/sdb4 431 77825 621675337+ 83 Linux

Ладно, так как мы его все равно лишили swap, то отправляем его в reboot, пока каких-нибудь «коллизий» не возникло :

<strong>reboot</strong>

После возврата в командной строке не забудем «вынуть» смонтированный автоматом раздел с препарируемого диска, чтобы он не мешал:

<strong>umount /dev/sdb4</strong><br />

Далее — закончим с fdisk:

<strong>fdisk /dev/sdb</strong><br />
&nbsp;<br />
The number of cylinders for this disk is set to 77825.<br />
There is nothing wrong with that, but this is larger than 1024,<br />
and could in certain setups cause problems with:<br />
1) software that runs at boot time (e.g., old versions of LILO)<br />
2) booting and partitioning software from other OSs<br />
(e.g., DOS FDISK, OS/2 FDISK)<br />
&nbsp;<br />
Command (m for help): <strong>m</strong><br />
&nbsp;<br />
Command Action<br />
...<br />
n add a new partition<br />
...<br />
w write table to disk and exit<br />
&nbsp;<br />
Command (m for help): <strong>n</strong><br />
&nbsp;<br />
Command action<br />
e extended<br />
p primary partition (1-4)<br />
&nbsp;<br />
<strong>p</strong><br />
Partition number (1-4): <strong>1</strong><br />
&nbsp;<br />
First cylinder (1-77825, default 1): &lt;<strong>enter</strong>&gt; - <em>просто жму кнопу ввод, так как хочу все свободное место с первого цилиндера, а значение default как раз на это пальцем показывает</em><br />
Using default value 1<br />
Last cylinder or +size or +sizeM or +sizeK (1-430, default 430): &lt;<strong>enter</strong>&gt; - <em>фдиск умный, не правда ли?</em><br />
Using default value 430<br />
&nbsp;<br />
Command (m for help): <strong>w</strong><br />
&nbsp;<br />
The partition table has been altered!
Calling ioctl() to re-read partition table<br />
&nbsp;<br />
sh-3.00# <strong>fdisk -l /dev/sdb</strong><br />
&nbsp;<br />
Disk /dev/sdb: 640.1 GB, 640135028736 bytes<br />
255 heads, 63 sectors/track, 77825 cylinders<br />
Units = cylinders of 16065 * 512 = 8225280 bytes<br />
Device Boot Start End Blocks Id System<br />
&nbsp;<br />
/dev/sdb1 1 430 3453943+ 83 Linux<br />
/dev/sdb4 431 77825 621675337+ 83 Linux

Ну вот — сейчас можно и форматнуть в ext2 - раздел маловатый чтобы под журнал место тратить (ключик -j не бум указывать), а заодно и метку дадим (-L) smallb:

<strong>mke2fs -b 4096 -m 0 -L smallb /dev/sdb1</strong><br />
mke2fs 1.39 (29-May-2006)<br />
Filesystem label=smallb<br />
OS type: Linux<br />
Block size=4096 (log=2)<br />
Fragment size=4096 (log=2)<br />
432000 inodes, 863484 blocks<br />
0 blocks (0.00%) reserved for the super user<br />
First data block=0<br />
27 block groups<br />
32768 blocks per group, 32768 fragments per group<br />
16000 inodes per group<br />
Superblock backups stored on blocks:<br />
32768, 98304, 163840, 229376, 294912, 819200<br />
Writing inode tables: done<br />
Writing superblocks and filesystem accounting information: done<br />
This filesystem will be automatically checked every 30 mounts or<br />
180 days, whichever comes first. Use tune2fs -c or -i to override.

Чтобы диск не просил проверить состояние своего здоровья через 30 ребутов — сделаем сразу то, что он подсказал:

<strong>tune2fs -c 0 /dev/sdb1</strong><br />
tune2fs 1.39 (29-May-2006)<br />
Setting maximal mount count to -1

Последняя отправка в ребут — посмотрим что там с автомаунтом и меткой диска будет:

<strong>reboot</strong>

По просыпанию наслаждюсь — лейба маунта smallb бежит по экрану, а в шелле:

<strong>ls -al / | grep small</strong><br />
lrwxrwxrwx 1 root root 43 Sep 16 00:00 smallb -&gt; /opt/sybhttpd/localhost.drives/SATA_DISK_B1<br />
sh-3.00# <strong>df -h | grep /dev/sdb</strong><br />
/dev/sdb1 3.2G 20.0K 3.2G 0% /opt/sybhttpd/localhost.drives/SATA_DISK_B1<br />
/dev/sdb4 583.6G 581.6G 2.0G 100% /opt/sybhttpd/localhost.drives/SATA_DISK_B4

3.2 Гига — мелочь, но пусть будет — такой запас карман не тянет! :) Как раз сгодится на копии папки /share/Apps, когда системную флешку нужно будет в очередной раз перетирать целиком.

5 комментариев к этой записи

  • Padavan

    Статья хорошая, но упущен очень важный шаг. Перед тем как начинать орудовать в fdisk (удалять или изменять разделы), нужно обязательно размонтировать все разделы подопытного диска. Иначе можно убить данные.

    Большую часть можно размонтировать прямо из меню попкорна, выбрав команду «Извлечь», однако swap раздел, который реально подключен, нужно «отрывать» руками через swapoff. Также обязательное размонтирование требуется перед использованием чекера e2fsck (fsck.ext2, fsck.ext3). В противном случае может быть затерт суперблок и все содержимое на диске будет потеряно. Очень важно!

    • WildFlexy

      Padavan, спасибо за комментарий, заходи почаще в гости!
      Предупреждение я разместил вверху, балуюсь fdisk с С-200 не первый раз. При остановленных приложениях, балующихся файлами, не критично отключение swap.
      Да и fdisk, отработав на диск, не загрузил новую таблицу в память.

      fdisk: WARNING: rereading partition table failed, kernel still uses old table: Device or resource busy

      То есть, если никакие проги не будут лезть в этот период на сам диск в partition table, все приложения будут пользоваться тем, что есть у Linux в памяти, и считать что swap есть и, при необходимости, пользоваться им по-прежнему. Я же не создавал там FS, да и make2fs бы этого не дал.
      Про использование swap, как показал длительный мониторинг — с майской прошивки начиная, приложения не хотят вообще в swap ложиться — 192Мбайт оперативки им как-то с трудом, но хватает. Если после правки fdisk-ом пойти попить чай, а потом устроить ребут — то думаю да, можно и навернуть тазик. Но копия MBR и таблицы разделов у меня с диска снята заранее через dd.

      dd if=/dev/sdb of=/share/mbr.sec bs=512 count=1

      А e2fsck обладает тем, что при попытке устроить проверку на смаунченном разделе, выругает пользователя и спросит подтверждение.
      Практика, может быть и не совсем корректная, то есть не типичная — но в этом случае позволительны некоторые обходы правильных процедур.
      Открою страшную подробность — я не отмаунтил /dev/sdb4, потому как там Transmission дочекивал файл.

      • Padavan

        Спасибо.

        Все же fdisk — это брутальная утилита, поэтому лучше раделы размонтировать, чтобы потом не жалеть.

        По поводу e2fsck и предупреждения все так, однако история помнит случаи, когда люди пренебрегали предупреждением и отвечали «y». Потом посыпали голову пеплом.

        Насчет swap я в принципе согласен, однако тут несколько ньюансов. Во первых неизвестно что нам принесет новый джукбокс UI, он вроде бы как на флеше. Во вторых, если активно юзать торрент с большим количеством пиров и использовать попкорн как NAS, памяти может и не хватить. В случае, если используется внутренний 2.5» диск, есть смысл заюзать на нем swap раздел в 512МБ. ИМХО.

  • Alex

    Можно ли воссоединить freespace от первых трех разделов с основным без монтирования к PC и обработки Acronis’ом ?

    • WildFlexy

      Да, но при этом надо приложить руки через shell.
      Именно об этом и есть эта статья.
      Хотя после некоторого прошедшего времени я бы внес в алгоритм несколько более грамотных изменений.

2010–2024 © NMT-200 ЧаВо