Android Studio: на устройстве не осталось свободного места
Кто из вас не сталкивался с этим сообщением при обновлении студии под linux? Пожалуй каждый, кому доводилось с ней работать эту ошибку уже видел хотя бы раз и спешно шел в гугель для поиска ответа на вопрос что же ей не нравится и как это фиксить.
java.io.IOException: На устройстве не осталось свободного места
java.io.IOException: No space left on device
И так каждый раз. А вся проблема в том, что студия использует /tmp для распаковки установочных архивов перед копированием.
И чаще всего места там катастрофически недостает.
$ df -h |grep \/tmp
tmpfs 3,9G 455M 3,4G 12% /tmp
Во многих дистрибутивах размер раздела выставляется равным половине объема озу. Решений несколько и каждый применяет то, которое ему нравится больше.
Временное увеличение размера /tmp
$ sudo mount -o remount,size=8G,noatime /tmp
Чем плохо: система активно начнем использовать подкачку и ей может просто не хватить суммарного объема свопа и ram.
Переназначение временной директории для студии
В открывшийся файл дописываем указание временной директории для виртуальной машины.
-Djava.io.tmpdir=/path-to-tmp-dir
Минус подхода: вся инфраструктура будет использовать эту временную директорию (компиляция, запуск и прочее), что приведет к замедлению работы если директория находится на диске (и неважно ssd это или hdd).
А еще все настройки будут теряться при обновлении студии (они хранятся в каталоге с настройками студии.
Есть другой вариант, позволяющий вынести настройки в глобальную область.
echo "-Djava.io.tmpdir=/tmp-dir-path" > ~/android-studio-tmp.fix
STUDIO_VM_OPTIONS=~/android-studio.fix android-studio
Указать временную директорию для всех приложений java
Прописать в .bashrc
export _JAVA_OPTIONS=-Djava.io.tmpdir=/path-to-tmp-dir
Это наименее разумный способ - он заставит абсолютно все java-приложения использовать указанную директорию.
Указать отдельное размещение для распаковки временных файлов в момент установки
$ cd ~
$ mkdir -p tmp/PackageOperation04
$ cd /tmp
$ ln -s $HOME/tmp/PackageOperation04
Самый разумный способ, имхо. Делать это нужно непосредственно перед тем, как вы нажмете кнопку “обновить”.
Литература
Категории: Разработка HowTo