Перераспределение внутренней памяти SGH-I717

Я сталкивался с некоторыми вариантами этого вопроса, но я не могу найти окончательного решения.

У меня есть Samsung Galaxy Note SGH-I717, в настоящее время работающий под управлением Android 4.1.2. Телефон рекламируется как 16 ГБ, из которых 1,97 ГБ — это «память устройства», а 10,84 ГБ — «USB-накопитель».

Как увеличить раздел "память устройства" за счет раздела "USB-накопитель"?

Насколько я понимаю, мне понадобится файл PIT, но я не уверен, где его взять. В идеале я бы хотел, чтобы внутреннее хранилище было разделено на 2 равных раздела.

2 ГБ для хранения приложений недостаточно, и я не знаю, почему Samsung накладывает такие произвольные ограничения.

Я открыт и для других предложений. Разрешит ли установка Cyanogenmod модификацию этих разделов, или это контролируется на еще более низком уровне?

Спасибо.

Раздел не зависит от ОС, поэтому установка цианогена не поможет.
@ Fabiusp98 Спасибо за подтверждение. Я склонялся к этому. Итак, вы знаете способ сделать это? Я не понимаю, почему это так сложно, поскольку файловая система NTFS может быть довольно легко разбита на разделы.

Ответы (1)

Извините, у меня нет окончательного ответа для вас, но у меня есть некоторая информация, которая может помочь вам в вашем пути.

Боковая панель: не все приложения должны находиться в разделе 2 ГБ, вы можете использовать различные приложения Apps2SD, TitaniumBackup или встроенный диспетчер приложений для перемещения определенных приложений в раздел 10 ГБ. Приложения, которые работают постоянно (фоновые процессы, виджеты и т. д.), должны оставаться на разделе размером 2 ГБ.

У меня было 3 устройства Android, и я, кажется, помню, что когда-то переделывал одно из них, я думаю, что это был GT-P1000, перешедший с Android 1.x на 2.3. Я следовал руководству и не полностью понимал, что делаю, просто следуя пошаговым инструкциям... Я знаю, что переразметка была необходима, потому что до этого момента все мои ПЗУ были для файловой системы на основе RFS, и я делал переход на ext4 для повышения производительности ядра. Я думаю, что они также сжимали /system (ПЗУ), чтобы освободить место для /data (приложений).

Во-первых, ознакомьтесь с XDA. Каждый ответ, который мне когда-либо был нужен, был там. Я знаю, что все части, необходимые для этого, находятся там, просто, возможно, не скомпилированы в один поток. Я изучал все эти вещи за последние 4 года, а до этого у меня был профессиональный опыт программирования и системного администрирования более 15 лет - вам может потребоваться некоторое время, чтобы все это понять.

Во-вторых, да, это возможно , просто нецелесообразно. Вы можете либо изменить файл PIT, либо сделать это с помощью fdisk через ADB в режиме восстановления.

Вы говорите об изменении размера NTFS, но имейте в виду, что формат файловой системы не зависит от вашей таблицы разделов. В мире ПК у вас может быть до 4 разделов на жестком диске, и вы можете смешивать FAT16, FAT32, NTFS на каждом разделе, сколько хотите. Первый первичный раздел появляется как C:\, затем D:\, затем логические разделы (Win9x и DOS поддерживали только 1 первичный раздел, остальные должны были быть расширенными разделами с 1-4 логическими разделами внутри расширенного).

Изменение размера раздела не изменяет размер файловой системы. Большинство современных дисковых инструментов делают оба шага за вас одним щелчком мыши, но это все же два шага. Также не все FS поддерживают изменение размера, некоторые могут только увеличиваться, а некоторые могут уменьшаться и увеличиваться. С другой стороны, есть сторонние инструменты, которые могут изменять размер неизменяемых форматов (PartitionMagic).

Поскольку вы упомянули NTFS, я предполагаю, что вы работаете с Windows, но если вы знакомы с Unix (и, следовательно, с Linux), вам будет легче следовать. Вот перевод высокого уровня:

HardDisk1 (primary master) on a PC will show up as /dev/hda in Linux x86.
HardDisk2 (primary slave) is /dev/hdb
HD3 (secondary master) is /dev/hdc
HD4 (secondary slave) is /dev/hdd
SCSI, SATA and USB disks might be /dev/sda, /dev/sdb, ...

Разделы подчинены дискам:

HD1, Part1 = /dev/hda1
HD1, Part2 = /dev/hda2
HD1, Part3 = /dev/hda3
HD2, Part1 = /dev/hdb1
HD2, Part2 = /dev/hdb2

Затем вы помещаете файловую систему на свои разделы и монтируете их.

Окна:

HD1,P1::NTFS, mounted as C:\
HD2,P1::ExFAT, mounted as D:\

Линукс х86:

/dev/hda1::ext3 mounted as /
/dev/hda2::JFS mounted as /usr
/dev/hdb1::ExFAT, mounted as /data

Также в таблице разделов есть подсказка, указывающая, какой тип файловой системы выложен, но они не всегда совпадают. То, что в таблице разделов указано, что /dev/hdb1 имеет тип 0x07, не означает, что таблица файлов на самом деле NTFS. Хорошая ОС должна сравнивать их и отказываться монтировать файловую систему, а хороший инструмент форматирования должен обновлять таблицу разделов, но не всегда... Samsung или Android печально известны назначением, казалось бы, произвольных типов разделов для указания функции, а не файловой системы. Я уверен, что где-то есть рифма и причина, но я понятия не имею, что это такое.

Android имеет много разделов, первые 3 являются основными, 4-й расширенный и содержит до 30 логических разделов. У каждого есть определенная функция, и существует множество различных ФС, некоторые известные, а некоторые проприетарные.

Встроенное хранилище объемом 16 ГБ эквивалентно /dev/hda x86, но они называют его /dev/block/mmcblk0.

Первая SD-карта — /dev/mmcblk1 и так далее. Разделы на каждом «диске» получают ... p1, ... p2, ... p3 и так далее.

У каждого производителя продукта и устройства своя схема разметки разделов.

См. http://forum.xda-developers.com/showthread.php?t=1959445 .

i717 использует следующую схему, я не знаю, что все это значит, но большую часть этого я знаю (я получил это от объединения Android «df» & «fdisk -l /dev/block/mmcblk0» и от MacOS «heimdall print -pit" в режиме загрузки):

/dev/block/mmcblk0 <-- entire 16GB 'disk'
/dev/block/mmcblk0boot0 - ???
/dev/block/mmcblk0boot1 - ???
/dev/block/mmcblk0p1 - SMD_HDR - Primary boot loader
/dev/block/mmcblk0p2 - SBL1 - Secondary boot loader #1, your flash counter sits in here
/dev/block/mmcblk0p3 - SBL2
/dev/block/mmcblk0p4 - Extended Partition, container for the following logical partitions
/dev/block/mmcblk0p5 - RPM
/dev/block/mmcblk0p6 - SBL3
/dev/block/mmcblk0p7 - ABOOT
/dev/block/mmcblk0p8 - BOOT
/dev/block/mmcblk0p9 - TZ
/dev/block/mmcblk0p10 - SSD
/dev/block/mmcblk0p11 - PIT
/dev/block/mmcblk0p12 - PARAM
/dev/block/mmcblk0p13 - MODEM - 100MB /firmware vfat (baseband modem part 1)
/dev/block/mmcblk0p14 - MSM_ST1
/dev/block/mmcblk0p15 - MSM_ST2
/dev/block/mmcblk0p16 - MSM_FSG
/dev/block/mmcblk0p17 - 100MB /system/etc/firmware/misc_mdm vfat (modem part 2)
/dev/block/mmcblk0p18 - M9K_EFS1
/dev/block/mmcblk0p19 - M9K_EFS2
/dev/block/mmcblk0p20 - M9K_FSG
/dev/block/mmcblk0p21 - DEVENC - 10MB /efs ext4 - individual info like IMEI and Encryption
/dev/block/mmcblk0p22 - RECOVERY - 10MB  - Recovery, ClockWorkMod or TWRP
/dev/block/mmcblk0p23 - FOTA
/dev/block/mmcblk0p24 - SYSTEM - 1GB /system ext4
/dev/block/mmcblk0p25 - USERDATA - 2GB /data ext4
/dev/block/mmcblk0p26 - CACHE - 300 MB /cache 
/dev/block/mmcblk0p27 - TOMBSTONES - crash dump area?
/dev/block/mmcblk0p28 - UMS 10GB /sdcard user's playground (usually a vold virtual device)

Итак, ваш 2-гигабайтный раздел — это /dev/block/mmcblk0p25, а ваш 10-гигабайтный раздел — /dev/block/mmcblk0p28.

Делать то, что вы хотите, сохраняя данные, на самом деле невозможно, но я уже делал подобное на x86 следующим образом:

first you have to shrink the filesystem on /dev/block/mmcblk0p28,
then shrink the partition,
then move the partition to the end of the disk,
then move p27 to end just before p28 starts,
move p26 to butt up against p27,
grow partition p25 to fill the empty space in front on p26,
then extended filesystem on p25 to fill the partition...

На самом деле, нет никаких доступных инструментов, чтобы сделать все это. Более практичный метод:

1 You'll have to back up the contents of p25, p26, p27 and p28 to external SD,
2 rebuild the partition table with the new boundaries,
3 create new filesystems on each,
4 then restore data onto each.

Вы в основном смотрите на сброс настроек, ПЗУ должно остаться нетронутым. Если бы я должен был сделать это, я бы:

0 insert a brand new 32GB sd card into the note
1 boot to recovery
2 connect with adb shell
3 mount /dev/block/mmcblk1p1 to /external_sd
4 mount /dev/block/mmcblk0p25 to /data
5 mount /dev/block/mmcblk0p28 to /sdcard
6 tar /data to /external_sd/data.tar
7 tar /sdcard to /external_sd/sdcard.tar
8 unmount /data and /sdcard
9 use fdisk to rebuild partitions p25, p26, p27 & p28 where p25 is bigger, p26 & p27 are moved and p28 is smaller
10 make new filesystems on all four p25-p28
11 mount /data and /sdcard again
12 untar /external_sd/data.tar to /data
13 untar /external_sd/sdcard.tar to /sdcard
14 pray
15 reboot

Вот полная таблица разделов:

~ # fdisk -ul /dev/block/mmcblk0

Disk /dev/block/mmcblk0: 15.7 GB, 15758000128 bytes
1 heads, 16 sectors/track, 1923584 cylinders, total 30777344 sectors
Units = sectors of 1 * 512 = 512 bytes

              Device Boot      Start         End      Blocks  Id System
/dev/block/mmcblk0p1               1      204800      102400  92 Unknown
  Partition 1 does not end on cylinder boundary
/dev/block/mmcblk0p2   *      204801      205800         500  4d Unknown
  Partition 2 does not end on cylinder boundary
/dev/block/mmcblk0p3          205801      208800        1500  51 Unknown
  Partition 3 does not end on cylinder boundary
/dev/block/mmcblk0p4          208801    30777343    15284271+  5 Extended
  Partition 4 does not end on cylinder boundary
/dev/block/mmcblk0p5          212992      213991         500  47 Unknown
/dev/block/mmcblk0p6          221184      225279        2048  45 Unknown
/dev/block/mmcblk0p7          229376      234375        2500  4c Unknown
/dev/block/mmcblk0p8          237568      258047       10240  48 Unknown
/dev/block/mmcblk0p9          262144      263143         500  46 Unknown
/dev/block/mmcblk0p10         270336      271335         500  5d Unknown
/dev/block/mmcblk0p11         278528      279527         500  91 Unknown
/dev/block/mmcblk0p12         286720      307199       10240  93 Unknown
/dev/block/mmcblk0p13         311296      511999      100352   c Win95 FAT32 (LBA)
/dev/block/mmcblk0p14         516096      522239        3072  4a Unknown
/dev/block/mmcblk0p15         524288      530431        3072  4b Unknown
/dev/block/mmcblk0p16         532480      538623        3072  58 Unknown
/dev/block/mmcblk0p17         540672      741375      100352  8f Unknown
/dev/block/mmcblk0p18         745472      751615        3072  59 Unknown
/dev/block/mmcblk0p19         753664      759807        3072  5a Unknown
/dev/block/mmcblk0p20         761856      767999        3072  5b Unknown
/dev/block/mmcblk0p21         770048      790527       10240  ab Darwin boot
/dev/block/mmcblk0p22         794624      815103       10240  60 Unknown
/dev/block/mmcblk0p23         819200      839679       10240  94 Unknown
/dev/block/mmcblk0p24         843776     2940927     1048576  a5 FreeBSD
/dev/block/mmcblk0p25        2940928     7139327     2099200  a6 OpenBSD
/dev/block/mmcblk0p26        7143424     7761919      309248  a8 Darwin UFS
/dev/block/mmcblk0p27        7766016     8030207      132096  a9 NetBSD
/dev/block/mmcblk0p28        8036352    30777343    11370496  90 Unknown

Я собирался описать, что вы можете сделать с fdisk, но я вижу, что существующая таблица разделов оставляет неравные промежутки между каждым разделом - это беспокоит меня, потому что я не знаю, почему. Традиционно на диске вы должны создавать каждый раздел, начиная с 1 сектора после предыдущего. Опять же, размеры ваших разделов всегда будут выравниваться с границами цилиндров, поэтому, возможно, каждый новый раздел начинается с какой-то границы (кратной степени 2?), Даже если предыдущий раздел не заканчивался на единице??? Пробелы все (кратные 1024) плюс 1, но пока я не узнаю, каково правило делать промежутки, я бы не трогал разделы... Значит ли это, что я могу сделать предыдущий раздел 1024, 2048, 3192, 4096, ... блоки больше? Не использует ли система тайком это пустое пространство для недокументированных целей? кто знает...

Боковая панель: вы спрашиваете, поможет ли установка CyanogenMod или это ниже. Разделы настолько малы, насколько это возможно, затем есть загрузчики, затем ядро, затем ПЗУ (Cyanogen, ParanoidAndroid и т. д.), затем пользовательское пространство, такое как /data, /sdcard и /external_sd. Загрузка в режиме восстановления похожа на загрузку образа LiveCD бездисковой ОС, где вся система загружается в оперативную память. Таким образом, вы можете делать с жестким диском все, что хотите: резервное копирование, форматирование, создание разделов, восстановление, изменение размера, анализ, клонирование и т. д.; затем, если вы все правильно соберете, вы сможете перезагрузиться обратно в исходную ОС.

Что касается того, почему Samsung выбрал это произвольное ограничение в 2 ГБ, это связано с обратной совместимостью, когда чипы памяти 2 ГБ были самыми большими, которые вы могли получить, а в устройстве у вас было бы 2 чипа по 2 ГБ. 1-й чип будет иметь разделы для загрузчиков, ядра, root (/), / usr и / system ROM - и будет ТОЛЬКО ДЛЯ ЧТЕНИЯ из работающей ОС, чтобы пользователи не могли сломать это; 2-й чип будет установлен для чтения/записи в /data, чтобы пользователи могли устанавливать приложения и настройки. Это был базовый андроид со встроенным хранилищем. Если вам нужно больше места, это можно сделать с помощью SD-карты, которую вы вставите в слот, и она будет смонтирована в /sdcard. Когда чипы стали больше и дешевле, Samsung придерживался базовой конструкции и в основном предоставлял вам 12 ГБ (10 пригодных для использования) внутреннего хранилища, представляя его как /sdcard, затем они добавили внешнее хранилище и составили /external_sd. Это вызвало много путаницы, и некоторые ПЗУ монтировали внешнюю SD-карту как /sdcard, а 12 ГБ монтировали как что-то еще, например /emmc. В то время переход между ПЗУ был мучением, если вы переключались между разработчиками, которые следовали разным парадигмам. Сегодня это стало более стандартизированным с /storage/sdcard0, sdcard1 и т. д., и приложения разрабатываются с учетом этого, позволяя пользователям выбирать, какую SD-карту использовать, а просто предполагать, что /sdcard или /emmc существуют в правильной форме.

В общем, я согласен, что 2 ГБ слишком мало для /data, я постоянно перемещаю приложения на SD и интегрирую обновления приложений Google обратно в ПЗУ. Я не думаю, что я бы пошел на равных, и я знаю, что не стал бы объединять их в один большой / data и просто иметь внешнюю SD как / sdcard - по-старому ... Может быть, 4 ГБ для / data и 8 ГБ для /SD Card...

В любом случае, удачи.