Как запустить команду «parted» в эмуляторе терминала на моем Android-смартфоне

Обновленный вопрос (20.02.2018)

Благодаря ответу и комментарию Гравити мой вопрос может быть обновлен.

Моя конечная цель — получить подробную информацию о разделах (включая начальный и конечный адреса каждого раздела на моем телефоне Android) с помощью fdisk или parted.

  1. Как «установить» команду parted на мой Android-смартфон?

  2. Могу ли я использовать fdisk в системе Linux или Cygwin в системе Windows? Зная, что fdisk, предоставленный BusyBox, не может обрабатывать GPT. (Если это так, возможно, я мог бы опубликовать еще один вопрос.)


Оригинальный вопрос (2018/2/19)

Я установил Busybox на свой смартфон и хочу получить подробную информацию о разделах, включая начальный и конечный адреса каждого раздела на моем телефоне Android.

Я могу использовать команду fdisk, но, возможно, из-за того, что диск моего телефона GPT, а не MBR, команда «fdisk -l» не выводит.

Поэтому я хочу использовать команду «parted». Но на моем смартфоне его нет. Как я могу это получить?

Я посетил веб-сайт GNU "parted" . Но то, что я могу скачать, это только исходный код. Нужно ли мне это компилировать? Если да, то как мне это скомпилировать? Могу ли я скомпилировать исходный код с помощью MinGW на ПК с системой Windows?

Если я получу "разделенный" файл, куда мне его поместить, чтобы он заработал? Это в /system/bin?

Я еще не нашел пригодный для использования файл "parted". Это из-за моего плохого навыка Google или файл должен быть скомпилирован по-разному для разных устройств?

Надеюсь найти официальную версию файла "parted".


РЕДАКТИРОВАТЬ (2018/2/19)

Я знаю, что мое хранилище — GPT, потому что fdisk -l /dev/block/mmcblk0говорит мне. И я читал в сети, что fdisk не может обрабатывать GPT, а parted может. Я просто не уверен, почему fdisk -lничего не показывает.

fdisk -l /dev/block/mmcblk0

Disk /dev/block/mmcblk0: 15 GB, 15634268160 bytes, 30535680 sectors
1908480 cylinders, 1 heads, 16 sectors/track
Units: cylinders of 16 * 512 = 8192 bytes

Device             Boot StartCHS    EndCHS        StartLBA     EndLBA    Sectors  Size Id Type
/dev/block/mmcblk0p1    0,0,0       0,0,0                1   30535679   30535679 14.5G ee EFI GPT
Partition 1 does not end on cylinder boundary
Ваш вывод фактически показывает, что ваша fdiskверсия слишком старая и не поддерживает GPT. (Это util-linux fdisk или busybox fdisk?) Он показывает раздел «защитная MBR».
Я запускаю эту команду в эмуляторе терминала на своем телефоне Android. И я установил busybox. Я не знаю о версии fdisk. Кроме того, когда я подключаюсь к adb и запускаю оболочку adb на компьютере, результат тот же. Вы имеете в виду, что новейшая версия fdisk на Android поддерживает GPT? Или fdisk в системе Linux может обрабатывать GPT?
«fdisk на Android» не имеет значения. Важная часть заключается в том, откуда взялся fdisk — Busybox имеет свою собственную версию fdisk, точно так же, как у него есть, например, собственная версия lsи собственная версия sh, полностью отличные от традиционного Linux fdisk/ ls/ sh/ и т. д.

Ответы (3)

Примечание. Это применимо к Qualcomm SoC с eMMC (блочное устройство, доступное через FTL). Не тестировалось на MTK или других чипсетах (пути могут отличаться) или устройствах с необработанной памятью NAND/MTD.

РАЗДЕЛЕН

Как «установить» команду parted на мой Android-смартфон?

Официального способа нет, поэтому partedон не является частью AOSP. Android не хочет, чтобы вы играли с его таблицей разделов. Использование статического бинарного файла — лучший вариант, чтобы избежать сложностей с динамическим компоновщиком/загрузчиком, libc и т. д.

aarch64Статический двоичный файл parted для архитектуры (ARM-v8) и armel(ARM-v5) можно получить из this link. Я скомпилировал их на ArchLinuxARM (работает на моем Redmi Note 4) и на Ubuntu (ПК) с помощью gcc(кросс-)компилятора, glibcи они отлично работают. Сборка с помощью Bionic libcNDK (чтобы сделать его полностью Android-подобным) требует много изменений в исходном коде, потому что вызовы функций (libc), а также некоторые системные вызовы (ядро) различаются на Android и Linux. devmapperи NLSотключены, так как первый не используется напрямую, второй не поддерживается на Android.

ФДИСК/ГДИСК

Могу ли я использовать fdisk в системе Linux или Cynwin в системе Windows? Зная, что fdisk, предоставленный BusyBox, не может обрабатывать GPT. (Если это так, возможно, я мог бы опубликовать еще один вопрос.)

Вы также можете использовать fdiskна Android, но fdiskэто традиционный инструмент для управления таблицами разделов MBR, хотя более новые версии также поддерживают GPT. fdiskтакже показывает некоторую информацию о GPT, потому что GPT содержит защитную MBR (первый сектор диска или eMMC), которая содержит информацию о разделах. Кроме того, первый раздел (modem)на большинстве устройств Android, содержащий прошивку для процессора основной полосы частот (BP) FAT16, более совместим с файлами fdisk. Для других разделов fdiskможет вести себя странно или может произойти сбой.

Busybox fdiskочень минимален, как и другие апплеты, и я думаю, что он уже давно не обновлялся. Вместо этого GPT fdisk (gdisk)это отличный инструмент для таблиц разделов GUID, и в некоторых аспектах он лучше, чем parted.

gdisk, fdiskи mkfs.ext4(mke2fs) статические двоичные файлы также доступны по вышеупомянутой ссылке . Вы можете поместить их в любом месте вашего PATH; /system/bin, /system/xbin, /vendor/bin, /sbin(volatile) или даже где-то на /dataили sdcard.

Теперь просто выполните:

~# parted /dev/block/mmcblk0
(parted) p free

~# gdisk -l /dev/block/mmcblk0

Обратите внимание , что fdisk -lи parted -lне будет отображаться полная информация (или вообще не отображаться) об Android GPT, потому что ядро ​​​​Linux заполняет блочные устройства непосредственно под, /devв то время как Android использует /dev/blockпуть. Нам нужно изменить код перед компиляцией, чтобы он работал идеально. fdisk -lпоказывает loopустройства, потому что они имеют одинаковую номенклатуру. blkidтакже показывает информацию о разделе, потому что он читает из /proc/partitionsи /sys/dev/block/.

Окончательно!!!

С мощью приходит ответственность, а инструменты Linux сильны. Действительно. Смещение даже одного байта в границах разделов может привести к серьезным проблемам, худшим из которых будет невозможность использовать прошивальщики заводских прошивок. Так что будь осторожен!

Дальнейшее чтение:

Большое спасибо за изучение этого вопроса! Ты восхитителен! Я еще не пробовал, но я все еще даю вам согласие! Так вот почему я не пробовал. (1) расстались. У меня пока нет времени читать весь пост. (2)гдиск. В предоставленной вами ссылке, я думаю, есть только двоичный файл для системы Windows, как вы можете видеть здесь . Так что, возможно, мне все еще нужно скомпилировать, чтобы использовать gdisk.
И не могли бы вы потратить пару минут, чтобы взглянуть на этот вопрос , потому что я не могу настроить среду кросс-компиляции в Cygwin. Или вы бы предложили мне установить Linux вместо Cygwin?
Оба двоичных файла являются исполняемыми файлами ELF, т.е. для Linux/Android, а не для Windows. А для кросс-компилятора у меня есть система с двойной загрузкой; Винда и Убунту. Кроме того, у меня есть Arch chroot на моем телефоне. Лично мне Cygwin не нравится. Есть bash для Windows, WSL и т. д. Но они так или иначе ограничены. Если вы хотите насладиться настоящей свободой, используйте полную загрузочную систему Linux.
Теперь я смущен. Следуя предоставленной вами ссылке , я добрался сюда , чтобы найти двоичный файл gdisk. Но вот 7 бинарников. Какой из gdisk_1.0.3-1_amd64.deb; gdisk-efi-1.0.3.zip; gdisk-windows-1.0.3.zip; gdisk-1.0.3-1.x86_64.rpm; gdisk-1.0.3-1.i386.rpm; gdisk-1.0.3.pkg; gdisk_1.0.3-1_i386.deb; исполняемый файл ELF?
.deb — для дистрибутивов класса Debian, .rpm — для класса RedHat, amd64/x86_64 — 64-битный ПК, i386 — 32-битный, .pkg — для MacOS. Это все устанавливаемые пакеты. efi.zip содержит двоичный файл для UEFI, т. е. для использования перед загрузкой ОС. Windows.zip содержит 32-битные и 64-битные файлы .exe.
Итак, какой из них является двоичным файлом, который я могу использовать на телефоне Android? И могу ли я использовать его напрямую (поместите его в любом месте моего PATH, как вы сказали), или мне нужно сначала установить?
Загрузите бинарные файлы Android из моей ветки XDA. Вы путаете ссылки. Пожалуйста, прочтите еще раз. Да, статические двоичные файлы могут выполняться напрямую даже без PATH. Как правило, у них нет зависимости.

Я могу использовать команду fdisk, но, возможно, из-за того, что диск моего телефона GPT, а не MBR, команда «fdisk -l» не выводит.

Это не MBR и не GPT. Смартфоны обычно используют разделы MTD. Эти разделы настраиваются в дереве устройств, поэтому изменить их значительно сложнее, чем просто запустить редактор разделов.

Вы можете получить информацию о разделах, запустив cat /proc/mtd.

Судя по выходу, это GPT. И обратите внимание на Андроид .
Извините, я не ясно выразился. Я уверен, что мое хранилище GPT. Я просто не уверен, почему "fdisk -l" ничего не показывает. Добавлен вывод «fdisk -l /dev/block/mmcblk0».

возможно, потому что диск моего телефона - GPT, а не MBR, команда «fdisk -l» не выводит.

Или, может быть, у него нет прав на чтение таблицы разделов.

Хотя, насколько я знаю, многие телефоны на Android используют не программные разделы, а нечто более сложное: они аппаратно разбивают флэш-память . Так что даже не расставание поможет вам в этом случае.

Этот ответ на Android.SE может быть актуальным: https://android.stackexchange.com/questions/5232/how-can-i-view-the-android-internal-partition-table

Что касается вашего fdiskпримера вывода. Он ничего не показывает — он показывает один раздел!

Но это неправильный вид; реальная проблема заключается в том, что ваша версия fdisk не поддерживает GPT и показывает вам содержимое таблицы разделов «защитной MBR».

Все GPT-диски имеют фальшивую MBR, содержащую один массивный раздел, занимающий весь диск; его цель - предотвратить случайное уничтожение данных старыми инструментами только для MBR. Если вы видите это в выводе fdisk, это означает, что ваша версия fdisk поддерживает только MBR.

В пакет fdiskutil-linux добавлена ​​поддержка GPT в версии 2.23. Однако Busybox fdiskне имеет.


Тем не менее, остальное довольно общее и применимо ко всем программам, а не только к parted.

Я посетил веб-сайт GNU "parted". Но то, что я могу скачать, это только исходный код. Нужно ли мне это компилировать?

Да.

Если да, то как мне это скомпилировать? Могу ли я скомпилировать исходный код с помощью MinGW на ПК с системой Windows?

Возможно нет. MinGW ориентирован на создание сборок Windows x86/x64 — вам нужен кросс-компилятор, который будет предоставлять бинарные файлы Linux и компилировать для другой архитектуры процессора (ваш смартфон использует какой-то вариант ARM).

У Cygwin может быть совместимая версия gcc, но компиляция в Linux может быть намного проще.

Надеюсь найти официальную версию файла "parted".

Разработчики Linux редко предоставляют официальные скомпилированные версии — это обычно остается на усмотрение дистрибутивов.

Вы можете скачать официальные пакеты различных дистрибутивов, таких как Debian (Raspbian) или Arch Linux ARM, и извлечь нужные файлы вручную.

Будьте осторожны, чтобы выбрать правильную архитектуру процессора вашего телефона.

Во-вторых, обратите внимание, что вам понадобится нечто большее , чем просто «разделенный» файл: большая часть основных функций фактически находится в библиотеке (DLL-файле) с именем libparted.so.

Спасибо за ваш ответ. Сначала я попробую официальные пакеты, потому что это проще для меня. Но я не знаю, какую архитектуру выбрать. CPU-Z на моем телефоне показывает «8x ARM Cortex-A53». Должен ли я скачать «arm64»?
Архитектура ядра системы моего телефона — «armv8l», показанная в CPU-Z. Итак, я скачал armv7h на сайте archlinuxarm.org. Но я понятия не имею, как это установить. Не могли бы вы дать мне ключевое слово для поиска, если это не просто?
Нет, я имел в виду, fdisk -lбуквально ничего не показывает, в то время как текст справки говорит, -lчто покажет список моих разделов. fdisk -l /dev/block/mmcblk0показывает то, что вы можете видеть. Я очень ценю ваш ответ, но моя проблема все еще не решена. Я хочу выбрать простой способ использования parted на моем телефоне Android. Я скачал по последней предоставленной вами ссылке, и я полагаю, что armv7h совместим с архитектурой armv8l. Но как мне его «установить»? Я даже не знаю, какое ключевое слово мне следует гуглить.
Хорошо, дайте угадаю, я думаю, мне нужно поместить 66-килобайтный файл с именем «parted» /system/binи найти 203-килобайтный файл с именем «libparted.so.2.0.1» (после переименования его в «libparted.so») и поместить его. где-то (может быть, мне нужно искать *.so). В том, что все? Есть документ подтверждающий? Я действительно понятия не имею прямо сейчас.
Честно говоря, я тоже не знаю — я знаю обычный Linux, но структура файловой системы Android — загадка. На самом деле я даже подозреваю, что «обычные» сборки Debian/Arch могут быть даже несовместимы с Android libc…