Я сталкивался с некоторыми вариантами этого вопроса, но я не могу найти окончательного решения.
У меня есть Samsung Galaxy Note SGH-I717, в настоящее время работающий под управлением Android 4.1.2. Телефон рекламируется как 16 ГБ, из которых 1,97 ГБ — это «память устройства», а 10,84 ГБ — «USB-накопитель».
Как увеличить раздел "память устройства" за счет раздела "USB-накопитель"?
Насколько я понимаю, мне понадобится файл PIT, но я не уверен, где его взять. В идеале я бы хотел, чтобы внутреннее хранилище было разделено на 2 равных раздела.
2 ГБ для хранения приложений недостаточно, и я не знаю, почему Samsung накладывает такие произвольные ограничения.
Я открыт и для других предложений. Разрешит ли установка Cyanogenmod модификацию этих разделов, или это контролируется на еще более низком уровне?
Спасибо.
Извините, у меня нет окончательного ответа для вас, но у меня есть некоторая информация, которая может помочь вам в вашем пути.
Боковая панель: не все приложения должны находиться в разделе 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...
В любом случае, удачи.
Фабиусp98
TechCzar