Как найти путь к разделу подкачки на SD-карте?

Как это предупреждает, вы не должны включать своп на неправильном разделе, иначе вы можете испортить свой телефон:

ОК, прежде чем мы пойдем дальше! предыдущие телефоны имели структуру разделов, где mmcblck0 была SD-картой (внешней), наш телефон использует mmcblck1 для внешней SD-карты. Это важно, потому что, если вы используете приложение, оно может быть настроено на использование mmcblck0 в качестве раздела подкачки. Использование этого параметра приведет к тому, что вы будете использовать свой sbl2 или sbl3 в качестве раздела подкачки.

Таким образом, раздел подкачки может быть, /dev/block/mmcblk0p3если у меня есть 3 раздела (fat32, sdext, swap) на моей SD-карте, или /dev/block/mmcblk0p2если у меня есть 2 раздела (fat43 и swap), или /dev/block/mmcblk1p?если у вас другой телефон и т. д. и неправильный выбор может привести к поломке твой телефон.

Как узнать какой раздел какой? Это должен быть единственный раздел на любом диске телефона с swapфайловой системой.

  • fdisk -lделает это в Ubuntu , но ничего не выводит в Android
  • blkidне показывает раздел подкачки
  • cat /proc/partitionsперечисляет множество разделов, но не указывает, какой из них является свопом
  • cat /proc/swapsтолько список свопов, которые уже используются
  • cat /proc/mtdтолько говорит dev: size erasesize nameи ничего больше
  • ls /dev/block/voldперечисляет некоторые разделы как 179:64 179:65 179:66, но не указывает, что это такое?
  • 4ext recovery покажет его в таблице разделов ( swap swap 129 MiB), но не скажет имя разработчика
  • ...

Даже если нет инструмента командной строки для прямой печати, наверняка есть способ вывести его из какой-то другой информации ??

В твоем что-то есть /proc/swaps?
@ott--: cat /proc/swapsпросто показывает файл подкачки, созданный swapper 2, а не раздел на SD-карте
Поскольку вы уже знаете устройство (SDCard), пытались ли вы с помощью mount(без параметров) найти соответствующее блочное устройство ( /dev/block/*) и проверить его по списку /proc/partitions(или /proc/mtd)? Если у вас нет другого раздела на вашей карте, ваш раздел подкачки должен быть «другим разделом, оканчивающимся на цифру», если только это не mountуказано vold. В этом случае может помочь сравнение размеров (или временное удаление карты для сравнения).

Ответы (2)

Я установил приложение «Информация о диске » и в настройках включил режим «Эксперт» и « Размонтированные разделы » . Он не говорит «подкачка», но ясно показывает, что это единственный другой раздел на SD-карте и он правильного размера, поэтому /dev/block/mmcblk1p2он должен быть таким:

скриншот информации о диске

Swapper 2 настроен на использование /dev/block/mmcblk0p3по умолчанию, поэтому я рад, что не использовал его по умолчанию.

fdisk -lработает, если вы явно передаете полное имя дискового устройства (например, fdisk -l /dev/block/mmcblk1); что не работает, так это автоматическое обнаружение блочных устройств (очевидно, потому что Android помещает файлы блочных устройств в /dev/blockкаталог, но fdiskожидает увидеть эти файлы непосредственно в /dev). Поэтому один из вариантов — собрать список целых дисковых устройств ( /dev/block/mmcblk0, /dev/block/mmcblk1, …) и просмотреть их таблицы разделов с помощью . Эти целые дисковые устройства перечислены перед соответствующими разделами.fdisk -l <device>/proc/partitions

Утилита blkidвообще не смотрит на таблицу разделов — она открывает все известные системе блочные устройства и определяет тип файловой системы по фактическим данным на этих устройствах; поэтому blkidне будет показывать правильную информацию для раздела подкачки, пока этот раздел не будет инициализирован с помощью mkswap. Это означает, что blkidэто бесполезно для вашей текущей задачи (поиск того, какой раздел следует передать mkswap).

mountобычно показывает устройства под /dev/block/vold, которые названы в соответствии с их старшим и второстепенным номером. Чтобы получить обычное имя устройства, вы можете /proc/partitionsнайти строку, содержащую одинаковые числа в первых двух столбцах. Затем можно убрать часть с конца имени устройства, добавить в начало и передать полученное имя, чтобы увидеть таблицу разделов соответствующего устройства.p<number>/dev/block/fdisk -l

Имейте в виду, что если вы посмотрите на fdisk -lвывод для внутренней флэш-памяти eMMC, вы можете найти множество разделов со странными типами, особенно на устройствах на базе Qualcomm. Например, см. таблицу разделов для Samsung Galaxy W (GT-I8150):

# fdisk -lu /dev/block/mmcblk0                                  

Disk /dev/block/mmcblk0: 3959 MB, 3959422976 bytes
1 heads, 16 sectors/track, 483328 cylinders, total 7733248 sectors
Units = sectors of 1 * 512 = 512 bytes

              Device Boot      Start         End      Blocks  Id System
/dev/block/mmcblk0p1               1      212991      106495+  c Win95 FAT32 (LBA)
Partition 1 does not end on cylinder boundary
/dev/block/mmcblk0p2   *      212992      213991         500  4d Unknown
Partition 2 does not end on cylinder boundary
/dev/block/mmcblk0p3          213992      221183        3596  46 Unknown
Partition 3 does not end on cylinder boundary
/dev/block/mmcblk0p4          221184     7733247     3756032   5 Extended
Partition 4 does not end on cylinder boundary
/dev/block/mmcblk0p5          229376      239615        5120  47 Unknown
/dev/block/mmcblk0p6          245760      285759       20000  49 Unknown
/dev/block/mmcblk0p7          286720      292863        3072  58 Unknown
/dev/block/mmcblk0p8          294912      306175        5632  48 Unknown
/dev/block/mmcblk0p9          311296      324271        6488  50 Unknown
/dev/block/mmcblk0p10         327680      333823        3072  4a Unknown
/dev/block/mmcblk0p11         335872      342015        3072  4b Unknown
/dev/block/mmcblk0p12         344064      360447        8192  90 Unknown
/dev/block/mmcblk0p13         360448      375807        7680  91 Unknown
/dev/block/mmcblk0p14         376832      387071        5120  92 Unknown
/dev/block/mmcblk0p15         393216     1488895      547840  93 Unknown
/dev/block/mmcblk0p16        1490944     1613823       61440  94 Unknown
/dev/block/mmcblk0p17        1613824     3887103     1136640  95 Unknown
/dev/block/mmcblk0p18        3891200     3993599       51200  96 Unknown
/dev/block/mmcblk0p19        3997696     3998695         500  97 Unknown
/dev/block/mmcblk0p20        4005888     4013079        3596  98 Unknown
/dev/block/mmcblk0p21        4014080     4024319        5120  99 Unknown
/dev/block/mmcblk0p22        4030464     4070463       20000  9a Unknown
/dev/block/mmcblk0p23        4071424     4081663        5120  9b Unknown
/dev/block/mmcblk0p24        4087808     4101807        7000  9c Unknown
/dev/block/mmcblk0p25        4104192     4114431        5120  9d Unknown
/dev/block/mmcblk0p26        4120576     4130815        5120  9e Unknown
/dev/block/mmcblk0p27        4136960     4147199        5120  9f BSD/OS
/dev/block/mmcblk0p28        4153344     7733247     1789952  a0 Thinkpad hibernation

Коды типов разделов там даже опасно неверны, потому что /dev/block/mmcblk0p1, который объявлен Win95 FAT32 (LBA), на самом деле содержит некоторые системные данные (включая местоположения и хэши MD5 различных частей ПЗУ); однако , /dev/block/mmcblk0p28который является «внутренним хранилищем данных» в формате FAT16, имеет тип, который выглядит совершенно фальшивым. В данном случае производитель не стал повторно использовать 0x82код типа (Linux swap) в своих целях, но я не уверен, что таких коллизий никогда не бывает, поэтому не стоит слепо пытаться использовать какой-либо раздел, похожий на swap — сначала проверьте, что размер устройства и расположение разделов — это то, что вы ожидаете увидеть на своей SD-карте.

/proc/mtdникогда не используется для поиска раздела подкачки на SD-карте (драйверы MTD используются для доступа к непосредственно подключенным сырым флэш-чипам, они не могут работать с внешними SD-картами).

Ага! fdisk -l /dev/block/mmcblk1говорит/dev/block/mmcblk1p2 30637 31152 132096 82 Linux swap