{"id":5059,"date":"2016-07-11T23:07:33","date_gmt":"2016-07-11T21:07:33","guid":{"rendered":"https:\/\/speefak.spdns.de\/oss_lifestyle\/?p=5059"},"modified":"2024-06-02T17:23:35","modified_gmt":"2024-06-02T15:23:35","slug":"sailfish-os-speicherpfade-auf-sd-karte-mappen","status":"publish","type":"post","link":"https:\/\/speefak.spdns.de\/oss_lifestyle\/sailfish-os-speicherpfade-auf-sd-karte-mappen\/","title":{"rendered":"Sailfish OS &#8211; Speicherpfade auf SD Karte Mappen"},"content":{"rendered":"<p style=\"text-align: center;\"><span style=\"color: #ff6600;\">Ab SFOS 4.2 nicht mehr n\u00f6tig, da Apps Daten auf der Speicherkarte oder dem Internen Speicher ablegen k\u00f6nnen<\/span><\/p>\n<p>Die meisten Sailfish OS kompatiblen Smartphone Modelle bieten eine Speicherkapazit\u00e4t von 32 GB, einige Modelle auch 64 GB. Daher ist es etwas schwer nachzuvollziehen, warum Jolla den Systemspeicher ab Werk nur mit 2,8 GB bemisst, zumal f\u00fcr ein Systemupdate mindestens 650 MB des Systemspeichers verf\u00fcgbar sein m\u00fcssen. Umso erfreulicher ist es, dass die <a href=\"https:\/\/speefak.spdns.de\/oss_lifestyle\/sailfish-os-modifikationen-und-shell-scripte\/\" target=\"_blank\" rel=\"noopener noreferrer\">Sailfish OS Systempatition vergr\u00f6\u00dfert<\/a> werden kann. Dies geht allerdings zu Lasten des Userdatenspeichers, der voreingestellt bei 32 GB Gesamtspeicher ca. 19 GB umfasst. F\u00fcr Userdaten empfiehlt sich daher eine SD-Speicherkarte, zumal hier die Daten vom fest verbauten Hauptspeicher des Ger\u00e4tes separiert sind. Im Falle eines Telefondefektes k\u00f6nnen Userdaten somit ohne gro\u00dfen Aufwand exportiert werden.<\/p>\n<p>Sailfish OS selbst hat noch keine M\u00f6glichkeit ohne Terminalkonfiguration s\u00e4mtliche Userdaten auf die SD-Karte auszulagern. Der Linux Systemkern sowie die grundlegenden Dateisystemfunktionen erm\u00f6glichen eine Auslagerung auf eine SD-Karte recht einfach, in dem die Speicherpfade der Userdaten auf dem Telefonspeicher einfach auf die SD-Karte verlinkt\/gemappt werden. Um mehrfaches Einlesen diverser Apps wie z.B. der Gallery App zu vermeiden, gibt es 2 M\u00f6glichkeiten:<\/p>\n<ol>\n<li>Anlegen eines (versteckten) Hauptordners, in dem dann die Mappingordner erstellt werden<\/li>\n<li>Anlegen jedes Mappingordners als versteckten Ordner<\/li>\n<\/ol>\n<p>Um den Hauptordner von der Indexierung auszuschlie\u00dfen, gibt es ebenfalls zwei M\u00f6glichkeiten:<\/p>\n<ol>\n<li>Anlegen eines versteckten Hauptordners mit einem vorangestellten Punkt (Hauptordner)<\/li>\n<li>Anlegen einer versteckten Datei (.nomedia) im Hauptordner.<\/li>\n<\/ol>\n<p>Die beste Methode in Bezug auf die grafische Dateiverwaltung ist das Anlegen eines normalen Hauptordners mit einer versteckten &#8220;Anti-Index-Datei&#8221;. Alle Ordner sind damit sichtbar. Der Hauptordner mit den Mappingordnern wird durch eine nicht versteckte Datei (.nomedia) von der Indexierung, auf die z.B. die Gallery App zur\u00fcckgreift, ausgeschlossen. Somit werden nur die verlinkten Ordner mit ihrem jeweiligen Linkziel auf den Mappingordner indexiert, jedoch nicht der Mappingordner selbst, da dieser sich in dem von der Indexierung ausgeschlossenen Hauptordner auf der SD-Karte befindet. Alternativ kann auch die gesamte SD-Karte von der Indexierung ausgeschlossen, wenn alle User Ordner gemappt wurden.<\/p>\n<p>Mit folgendem Script k\u00f6nnen die Speicherpfade auf die SD-Karte verschoben, die doppelte Indexierung deaktiviert und nach Abschluss eine Neuindexeierung vollzogen werden:<\/p>\n<pre class=\"height-set:true lang:sh decode:true\">#!\/bin\/bash\r\n# name          : sfos_sc.sh\r\n# desciption    : sailfish os storage chooser \/\/ remap sailfish smartphone storage dirsectories to sd card\r\n# autor         : speefak (itoss@gmx.de)\r\n# licence       : (CC) BY-NC-SA\r\n  VERSION=2.0\r\n#\r\n#------------------------------------------------------------------------------------------------------------\r\n############################################################################################################\r\n#######################################   define global variables   ########################################\r\n############################################################################################################\r\n#------------------------------------------------------------------------------------------------------------\r\n\r\n UserSystemDirList=\"Desktop Documents Downloads Music Pictures Playlists Public Videos\"\r\n SDcardPath=$(mount -l | grep \" \/run\/media\/nemo\" | cut -d \" \" -f3)\r\n ContentBackupDir=\/home\/nemo\/sfos_sc_backup_$(date \"+%F_%H:%M:%S\")\r\n if [[ ! $(rpm -qa | grep -w sudo) ]]; then sudoCMD=devel-su ; else sudoCMD=sudo; fi\r\n \r\n#------------------------------------------------------------------------------------------------------------\r\n############################################################################################################\r\n###########################################   define functions   ###########################################\r\n############################################################################################################\r\n#------------------------------------------------------------------------------------------------------------\r\nusage () {\r\ncat &lt;&lt; USAGE\r\nsailfish os storage chooser - version $VERSION\r\nusage: $basename $0 &lt;option&gt;\r\n\r\noptions:\r\n -h, \t--help      \tdisplay help\r\n -v, \t--version   \tdisplay version\r\n -rd2sd\t\t\tremap directories to sd card\r\n -rddir\t\t\trecreate default user directories on smartphone storage\r\n -cfgix\t\t\tconfig tracker index ( comming soon )\r\nUSAGE\r\nexit 0\r\n}\r\n#------------------------------------------------------------------------------------------------------------\r\ncheck_for_valid_path () {\t\t\t#usage: check_for_valid_path \"\/checked\/path\"\r\n\r\n\tProcessingPath=$1\r\n\r\n\t#check write persmission\r\n\tcheck_write_permission () {\r\n\t\ttouch $ProcessingPath\/permissiontest 2&gt;\/dev\/null\r\n\t\tif [[ $? == 0 ]]; then\r\n\t\t\tprintf \"\\e[0;32m user has write permission for: $ProcessingPath\\n\"$(tput sgr0)\r\n\t\t\trm $ProcessingPath\/permissiontest\r\n\t\telse\r\n\t\t\tprintf \"\\e[0;31m user has no write permission for: $ProcessingPath\\n\"$(tput sgr0)\r\n\t\t\trequest_loop () {\r\n\t\t\t\tSetPermission=\r\n\t\t\t\tprintf \"\\n set permission (nemo.nemo): $ProcessingPath\\n\"\r\n\t\t\t\tread -n1 -e -p \" continue \/ abort (c\/A) \" SetPermission\r\n\t\t\t\tif [[ $SetPermission == [cC] ]]; then\r\n\t\t\t\t\trequest_loop_root () {\r\n\t\t\t\t\t\tprintf \" Root permission required. Enter password or cancel ( crtl+shift+c ):\"ProccessingUserSystemDirListProccessingUserSystemDirLi\r\n\t\t\t\t\t\tSetPermissionOutput=$(devel-su chown -R nemo.nemo $ProcessingPath 2&gt;&amp;1 | sed 's\/Password:\/\/')\r\n\t\t\t\t\t\tif [[ $(grep failed &lt;&lt;&lt; $SetPermissionOutput) ]]; then\r\n\t\t\t\t\t\t\tprintf \" $(echo $SetPermissionOutput | sed s\/\\\\n\/\/ ) \\n\"\r\n\t\t\t\t\t\t\trequest_loop_root\r\n\t\t\t\t\t\tfi\r\n\t\t\t\t\t}\r\n\t\t\t\t\trequest_loop_root\r\n\t\t\t\telif [[ $SetPermission == [aA] ]]; then\r\n\t\t\t\t\tprintf \"\\n\\e[0;31m seting permission failed: $ProcessingPath \\n\"$(tput sgr0)\r\n\t\t\t\t\texit 1\r\n\t\t\t\telse\r\n\t\t\t\t\trequest_loop\r\n\t\t\t\tfi\r\n\t\t\t}\r\n\t\t\trequest_loop\r\n\t\tfi\r\n\t}\r\n\r\n\t# check or create path\r\n\tif [[ -d $1 ]]; then\r\n\t\tprintf \"\\e[0;32m path exists: $ProcessingPath\\n\"$(tput sgr0)\r\n\t\tcheck_write_permission\r\n\telse\r\n\t\tprintf \"\\e[0;33m create path: $ProcessingPath\\n\"$(tput sgr0)\r\n\t\tMkdirOutput=$(mkdir $ProcessingPath 2&gt;&amp;1)\r\n\t\t\tif [[ $MkdirOutput ]]; then\r\n\t\t\t\tprintf \"\\n error creating path $MkdirOutput\\n\"\r\n\t\t\t\texit 1\r\n\t\t\tfi\r\n\t\tcheck_write_permission\r\n\tfi\r\n\tprintf \"\\n\"\r\n}\r\n#------------------------------------------------------------------------------------------------------------\r\nchoose_proccessing_directories () {\t\t# usage: choose_proccessing_directories &lt;remap|restore&gt;\r\n\r\n\tMode=$1\r\n\r\n\t# user directory mapping request\r\n\tfor UserSystemDir in $UserSystemDirList ; do\r\n\t\trequest_loop () {\r\n\t\t\tDirRequest=\r\n\t\t\tread -n1 -e -p \" $Mode directory: $UserSystemDir (y\/N)? \" DirRequest\r\n\t\t\tif   [[ \"$DirRequest\" == [yY] ]]; then\r\n\t\t\t\tProccessingUserSystemDirList=$(echo $ProccessingUserSystemDirList $UserSystemDir)\r\n\t\t\telif [[ \"$DirRequest\" == [nN]  ]]; then\r\n\t\t\t\tprintf \"\"\r\n\t\t\telse\r\n\t\t\t\trequest_loop\r\n\t\t\tfi\r\n\t\t}\r\n\t\trequest_loop\r\n\tdone\r\n\r\n\t# request android storage or exit if no direcoty is selected\r\n\tif [[ ! $ProccessingUserSystemDirList ]]; then\r\n\t\tprintf \"\\n no directory selected ...\\n\"\r\n\t\texit 0\r\n\tfi\r\n\tprintf \"\\n\"\r\n}\r\n#------------------------------------------------------------------------------------------------------------\r\ncreate_mapping_directories () {\r\n\r\n\t# create mapping directories on sd card\r\n\tfor MappingDir in $ProccessingUserSystemDirList ; do\r\n\t\tcheck_for_valid_path \"$SDcardPath\/$MappingDir\"\r\n\tdone\r\n}\r\n#------------------------------------------------------------------------------------------------------------\r\nmove_soure_directory_content_to_mapping_directory_create_link () {\r\n\r\n\tsubstitute_source_directory_with_link () {\r\n\r\n\t\t# check for special directory links like android storage\r\n\t\tif [[ $ProcessingDir == android_storage ]]; then\r\n\t\t\trm \/home\/.android\/data\/media\r\n\t\t\tln -s $SDcardPath\/android_storage \/home\/.android\/data\/media\r\n\t\t\treturn\t\r\n\t\tfi\r\n\r\n\t\tprintf \"\\n replace \/home\/nemo\/$ProcessingDir with link to $SDcardPath\/$ProcessingDir\"\r\n\t\tln -s $SDcardPath\/$ProcessingDir \/home\/nemo\/$ProcessingDir\r\n\t}\r\n\r\n\tprintf \"\\n moving directories to sd card : $ProccessingUserSystemDirList \\n\"\r\n\trequest_loop () {\r\n\t\tCPTContinue=\r\n\t\tread -n1 -e -p \" continue \/ abort (c\/A)? \" CPTContinue\r\n\t\tif   [[ \"$CPTContinue\" == [cC] ]]; then\r\n\t\t\tprintf \"\"\r\n\t\telif [[ \"$CPTContinue\" == [aA]  ]]; then\r\n\t\t\tprintf \"\\n abort, exit ... \\n\"\r\n\t\t\texit 0\r\n\t\telse\r\n\t\t\trequest_loop\r\n\t\tfi\r\n\t}\r\n\trequest_loop\r\n\r\n\tfor ProcessingDir in $ProccessingUserSystemDirList ; do\r\n\r\n\t\t# stop any android apps and service for proccessing android directory \r\n\t\tif [[ $ProcessingDir == android_storage ]]; then\r\n\t\t\tAndroidRunnungStatus=$(systemctl status  alien-service-manager.service | bash -c \"grep \"running\"\")\t\r\n\t\t\t$sudoCMD systemctl stop alien-service-manager.service\r\n\t\t\tif [[ ! $? == 0 ]]; then\r\n\t\t\t\tprintf \"\\e[0;31m can't stop android service \\n\"$(tput sgr0)\r\n\t\t\t\tcontinue\r\n\t\t\tfi\r\n\t\tfi\r\n\r\n\t\t# check for already linked directory\r\n\t\tif [[ $(ls -l \/home\/nemo\/$ProcessingDir | grep \" -&gt; \/\") ]] ; then\r\n\t\t\tprintf \"\\n directory already linked: $(ls -l \/home\/nemo\/$ProcessingDir | grep \" -&gt; \/\" | awk -F \" \" '{printf \"%s %s %s %s %s \\n\",$9, $10, $11, $12, $13}')\"\r\n\t\t# check for empty directory\r\n\t\telif\t[[ ! $(ls -A \/home\/nemo\/$ProcessingDir 2&lt;\/dev\/null ) ]] ; then\r\n\t\t\tprintf \"\\n moving content skipped (no content): \/home\/nemo\/$ProcessingDir\"\r\n\t\t\tsubstitute_source_directory_with_link\r\n\t\t# move directory content to target directory on sd card\r\n\t\telse\r\n\t\t\tprintf \"\\n moving content ... ( \/home\/nemo\/$ProcessingDir\/* $SDcardPath\/$ProcessingDir\/ )\"\r\n\t\t\tcp -aR \/home\/nemo\/$ProcessingDir\/. $SDcardPath\/$ProcessingDir\/\r\n\t\t\tErrorLog=$?\r\n\t\t\tif [[ $ErrorLog = 0 ]]; then\r\n\t\t\t\t# move source content to backup directory\r\n\t\t\t\tmkdir $ContentBackupDir\r\n\t\t\t\tmv \/home\/nemo\/$ProcessingDir\/ $ContentBackupDir\r\n\t\t\t\tsubstitute_source_directory_with_link\r\n\t\t\telse\r\n\t\t\t\tprintf \"\\n ERROR moving content ... ( \/home\/nemo\/$ProcessingDir\/* $SDcardPath\/$ProcessingDir\/ )\"\r\n\t\t\tfi\r\n\t\tfi\r\n\t\tprintf \"\\n\"\r\n\tdone\r\n}\r\n#------------------------------------------------------------------------------------------------------------\r\nrecreate_default_user_directories () {\r\n\r\n\t#TODO request : check for free space on internal storage and copy sd card content to internal storage\r\n\r\n\t# delete choosen symlinks and create directories\r\n\tcd \/home\/nemo\r\n\tfor ProccessingUserSystemDir in $ProccessingUserSystemDirList ; do\r\n\t\tRemoveError=$(rm \/home\/nemo\/$ProccessingUserSystemDir 2&gt;&amp;1 | awk -F \"': \" '{printf $2}' | tr '[:upper:]' '[:lower:]' )\r\n\t\tif [[ $RemoveError ]]; then\r\n\t\t\tprintf \"\\n Processing skipped: \/home\/nemo\/$ProccessingUserSystemDir $RemoveError\"\r\n\t\t\tcontinue\r\n\t\tfi\r\n\t\tmkdir \/home\/nemo\/$ProccessingUserSystemDir\r\n\t\tchmod 755 \/home\/nemo\/$ProccessingUserSystemDir\r\n\t\r\n\t\t# check for special directory links like android storage\r\n\t\tif [[ $ProcessingDir == android_storage ]]; then\r\n\t\t\trm \/home\/.android\/data\/media\r\n\t\t\tln -s \/home\/.android\/data\/media \/home\/nemo\/android_storage\r\n\t\t\treturn\t\r\n\t\tfi\r\n\tdone\r\n\tprintf \"\\n\"\r\n\tcd - &gt; \/dev\/null\r\n}\r\n#------------------------------------------------------------------------------------------------------------\r\nskip_sd_card_file_indexing () {\t\t\t# usage: skip_sd_card_file_indexing &lt;-rq|-rs&gt;  (ReQeust|ReStore)\r\n\r\n\t#TODO: exclude indexing for each mapped directory instead of global index excluding on entire sd card\r\n\t# create exclude index main dir on sd card to create target directories in there\r\n\t# extend \/ create layer SDcardPath=\"$(mount -l | busybox grep \" \/run\/media\/nemo\" | cut -d \" \" -f3)exclude_index\"\r\n\r\n\tif [[ $1 == \"-rq\" ]]; then\r\n\t\tprintf \"\\e[0;33m\"\r\n\t\tprintf \"\\n Tracker indexes directories on Smartphone and sdcard storage.\"\r\n\t\tprintf \"\\n If indexing for linked directories on sd card is not disabled,\"\r\n\t\tprintf \"\\n tracker indexes linked and source directories\/files.\"\r\n\t\tprintf \"\\n So files are indexed and shown serveral times.\\n\\n\"$(tput sgr0)\r\n\r\n\t\trequest_loop () {\r\n\t\t\tDirIndex=\r\n\t\t\tread -n1 -e -p \" disable file index for sd card (y\/N)? \" DirIndex\r\n\t\t\tif   [[ \"$DirIndex\" == [yY] ]]; then\r\n\t\t\t\ttouch $SDcardPath\/.nomedia\r\n\t\t\t\tprintf \" file index disabled: $SDcardPath\"\r\n\t\t\telif [[ \"$DirIndex\" == [nN]  ]]; then\r\n\t\t\t\trm $SDcardPath\/.nomedia 2&gt; \/dev\/null\r\n\t\t\t\tif [[ $? == 1 ]]; then\r\n\t\t\t\t\tprintf \" file index already enabled: $SDcardPath\"\r\n\t\t\t\telse\r\n\t\t\t\t\tprintf \" file index enabled: $SDcardPath\"\r\n\t\t\t\tfi\r\n\t\t\telse\r\n\t\t\t\trequest_loop\r\n\t\t\tfi\r\n\t\t\tprintf \"\\n\"\r\n\t\t}\r\n\t\trequest_loop\r\n\r\n\telif [[ $1 == \"-rs\" ]]; then\r\n\t\tExcludeIndexDirList=$(find \/home\/nemo $SDcardPath -name .nomedia 2&gt; \/dev\/null | grep -v android_storage)\r\n\t\tfor ExludeIndexDir in $ExcludeIndexDirList ; do\r\n\t\t\trequest_loop () {\r\n\t\t\t\tExcludeDirRequest=\r\n\t\t\t\tread -n1 -e -p \" enable directory index for : $ExludeIndexDir (y\/N)? \" ExcludeDirRequest\r\n\t\t\t\tif   [[ \"$ExcludeDirRequest\" == [yY] ]]; then\r\n\t\t\t\t\tprintf \"\"\r\n\t\t\t\t\trm $ExludeIndexDir\r\n\t\t\t\telif [[ \"$ExcludeDirRequest\" == [nN]  ]]; then\r\n\t\t\t\t\tprintf \"\"\r\n\t\t\t\telse\r\n\t\t\t\t\trequest_loop\r\n\t\t\t\tfi\r\n\t\t\t\tprintf \"\"\r\n\t\t\t}\r\n\t\t\trequest_loop\r\n\t\tdone\r\n\tfi\r\n\tprintf \"\\n\"\r\n}\r\n#------------------------------------------------------------------------------------------------------------\r\nconfig_tracker_index () {\r\n\r\n\techo TODO #TODO\r\n\t# read linked directories in \/home\/nemo\r\n\t# read excluded directories in \/home\/nemo and \/sdcardstorage contianin .nomedia file\r\n\t# Request for upwards directory for linked directories to exclude from tracker ( default entire SD card )\r\n\t# Request for single exclude directories in \/home\/nemo and sdcardstorage and already excluded directories\r\n}\r\n#------------------------------------------------------------------------------------------------------------\r\nreload_tracker_index () {\t\t\t# usage reload_tracker_index \"Dir1 Dir2 Dir3\"\r\n\r\n\tprintf \"\\n Clear tracker index database\"\r\n\ttracker reset -ry &gt; \/dev\/null\r\n\tprintf \"\\n Reload tracker index database\"\r\n\tfor IndexDirectory in $@ ; do\r\n\t\t# avoid root fs index\r\n\t\tif [[ ! $( sed 's\/ \/\/g' &lt;&lt;&lt; $IndexDirectory) ]]; then\r\n\t\t\tcontinue\r\n\t\tfi\r\n\t\tTrackerOutput=$(tracker index -f $IndexDirectory\/* 2&gt;&amp;1 | sort -u )\r\n\t\tif [[ $(grep \"(Re)indexing file was successful\" &lt;&lt;&lt; $TrackerOutput)  ]]; then\r\n\t\t \tprintf \"\\n  (Re)indexing successful for: $IndexDirectory\"  \r\n\t\telse\r\n\t\t\tprintf \"\\n  (Re)indexing failed for:     $IndexDirectory \"\r\n\t\t\tprintf \"($(echo $TrackerOutput | awk -F \": \" '{print $NF}'))\"\r\n\t\tfi\r\n\tdone\r\n\tprintf \"\\n\"\r\n}\r\n#------------------------------------------------------------------------------------------------------------\r\ncreate_symlink_to_sd_card () {\r\n\r\n\t# sd card home link request\r\n\trequest_loop () {\r\n\t\tSDCardLink=\r\n\t\tread -n1 -e -p \" Link sd card main directory into home directory (y\/N) ? \" SDCardLink\r\n\t\tif   [[ \"$SDCardLink\" == [yY] ]]; then\r\n\t\t\tif [[ $(ls -l \/home\/nemo\/sdcard 2&gt;&amp;1 | grep \" -&gt; \/\") ]] ; then\r\n\t\t\t\tprintf \" sd card already linked in home directory: \/home\/nemo\/sdcard\\n\"\r\n\t\t\telse\r\n\t\t\t\tln -s $SDcardPath \/home\/nemo\/sdcard\r\n\t\t\t\tprintf \" sd card link created in home directory: \/home\/nemo\/sdcard\\n\"\r\n\t\t\tfi\r\n\t\telif [[ \"$SDCardLink\" == [nN]  ]]; then\r\n\t\t\tprintf \"\"\r\n\t\telse\r\n\t\t\trequest_loop\r\n\t\tfi\r\n\t}\r\n\trequest_loop\r\n\tprintf \"\\n\"\r\n}\r\n#------------------------------------------------------------------------------------------------------------\r\n############################################################################################################\r\n#############################################   start script   #############################################\r\n############################################################################################################\r\n#------------------------------------------------------------------------------------------------------------\r\n\r\n\t# deny root execution\r\n\tif [ ! \"$(whoami)\" = \"root\" ]; then printf \"\";else printf \"\\nYou are Root !\\n\\n\";exit 1;fi\r\n\r\n#------------------------------------------------------------------------------------------------------------\r\n\r\n\tcase $1 in\r\n     \t\t-[hv]|--help|--version\t)\tusage;;\r\n\r\n\t\t-rd2sd\t\t\t)\tchoose_proccessing_directories \"remap\"\r\n\t\t\t\t\t\tcreate_mapping_directories\r\n\t\t\t\t\t\tmove_soure_directory_content_to_mapping_directory_create_link\r\n\t\t\t\t\t\tskip_sd_card_file_indexing -rq\r\n\t\t\t\t\t\tcreate_symlink_to_sd_card\r\n\t\t\t\t\t\treload_tracker_index \"\/home\/nemo\"\r\n\t\t\t\t\t\t;;\r\n\r\n\t\t-rddir\t\t\t)\tchoose_proccessing_directories \"restore\"\r\n\t\t\t\t\t\trecreate_default_user_directories\r\n\t\t\t\t\t\tskip_sd_card_file_indexing -rs\r\n\t\t\t\t\t\tcreate_symlink_to_sd_card\r\n\t\t\t\t\t\treload_tracker_index \"\/home\/nemo $SDcardPath\"\r\n\t\t\t\t\t\t;;\r\n\r\n\t\t -cfgix\t\t\t)\tprintf \"\\n Comming soon. Check https:\/\/speefak.spdns.de\/oss_lifestyle\/sailfish-os-speicherpfade-auf-sd-karte-mappen for code updates \\n\"\r\n\t\t\t\t\t\t;;\r\n\r\n\t\t\t\t\t*)\tusage\t\t\r\n\t\t\t\t\t\t;;\r\n\tesac\r\n\r\n#------------------------------------------------------------------------------------------------------------\r\n\r\n\r\n\r\n#------------------------------------------------------------------------------------------------------------\r\n\r\nexit 0<\/pre>\n<p>&nbsp;<\/p>\n<h2>Android Speicher auf SD-Karte auslagern (AOSP 4.4 \/ Sony Xperia Series)<\/h2>\n<p>Der Speicherpfad des Android Systems und der installierten Apps befindet sich unter \/opt\/alien\/, der Appspeicherpfand unter \/home\/nemo\/android_storage. System-, sowie Appspeicher lassen sich auf die SD-Karte verschieben und in dem entsprechenden Quellpfad verlinken. F\u00fcr den Systemordner wird dies aber nicht empfohlen, da Symlinks vom Linux Kernel \/ Dateisystem anders behandelt werden als ein nativer Pfad und es somit zu Problemen kommen kann. Ein remount vom Ziel ins Quellverzeichnis (mount &#8211;bind) ist m\u00f6glich, muss aber beim Systemstart initiiert werden, was wiederum Eintr\u00e4ge in der \/etc\/fstab ben\u00f6tigt. Die \/etc\/fstab wiederum wird allerdings bei einem Update von Sailfish OS \u00fcberschrieben. Das kann per Script gel\u00f6st werden, das wiederum usw. &#8211; es wird immer komplizierter, ergo sollte der Androidsystempfad besser nicht ge\u00e4ndert werden. In der Regel reicht der verf\u00fcgbare Speicher f\u00fcr die Installation des Androidsystems und der Apps vollkommen aus.<\/p>\n<p>Beim Appspeicher hingegen wird der verf\u00fcgbare Speicherplatz auf der Sailfisch OS Systempartition jedoch recht schnell knapp. Auch wird der Benutzerordner \/home\/nemo bei Systemupdates nicht ver\u00e4ndert. Somit sind \u00c4nderungen unter \/home\/nemo von Updates nicht betroffen.<\/p>\n<p>Android Apps akzeptieren nicht immer Symlinks und aus diesem Grund reicht ein einfaches Verschieben und Verlinken von \/home\/nemo\/android_storage auf die SD-Karte nicht aus. In der Datei \/opt\/alien\/system\/script\/platform_envsetup.sh werden grundlegende Parameter, u.a. auch Speicherpfade der Androidumgebung, konfiguriert.<\/p>\n<p>Im Folgenden wird der Appspeicher der Androidemulation von Sailfish OS auf die SD-Karte kopiert, im Quellpfad verlinkt und in der Androidkonfiguration ge\u00e4ndert.<\/p>\n<pre class=\"lang:sh decode:true \">if [[ ! $(rpm -qa | \/bin\/grep -w sudo) ]]; then sudoCMD=devel-su ; else sudoCMD=sudo; fi\r\n$sudoCMD systemctl stop aliendalvik.service\r\nSDCardPath=$(mount -l | \/bin\/grep \"\/dev\/mmcblk1p1\" |  cut -d \" \" -f3 | head -n1)\r\n$sudoCMD chown $USER.$USER $SDCardPath\r\nmv android_storage  $SDCardPath\/\r\nln -s $SDCardPath\/android_storage .\r\n$sudoCMD cp \/opt\/alien\/system\/script\/platform_envsetup.sh \/opt\/alien\/system\/script\/platform_envsetup.sh_bck\r\n$sudoCMD sed 's|MEDIA_STORAGE=.*|MEDIA_STORAGE='$SDCardPath'\/android_storage|' -i \/opt\/alien\/system\/script\/platform_envsetup.sh<\/pre>\n<h2>Jollaphone (AOSP 4.1.2)<\/h2>\n<p>Der AppSpeicherpfad des Adroid Systems der AOSP 4.1.2 Version befindet sich unter \/opt\/alien\/run\/media\/nemo statt wie bei AOSP 4.4 unter \/home\/nemo\/android_storage.<\/p>\n<pre class=\"lang:sh decode:true \">if [[ ! $(rpm -qa | \/bin\/grep -w sudo) ]]; then sudoCMD=devel-su ; else sudoCMD=sudo; fi\r\n$sudoCMD systemctl stop aliendalvik.service\r\nSDCardPath=$(mount -l | \/bin\/grep \"\/dev\/mmcblk1p1\" | cut -d \" \" -f3 | head -n1)\r\n$sudoCMD chown $USER.$USER $SDCardPath\r\nmv \/opt\/alien\/run\/media\/nemo $SDCardPath\/\r\nmv $SDCardPath\/nemo $SDCardPath\/android_storage\r\nln -s $SDCardPath\/android_storage .\r\n$sudoCMD cp \/opt\/alien\/system\/script\/platform_envsetup.sh \/opt\/alien\/system\/script\/platform_envsetup.sh_bck\r\n$sudoCMD sed 's|MEDIA_STORAGE=.*|MEDIA_STORAGE='$SDCardPath'\/android_storage|' -i \/opt\/alien\/system\/script\/platform_envsetup.sh<img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-5077\" src=\"https:\/\/speefak.spdns.de\/oss_lifestyle\/wp-content\/uploads\/2019\/07\/blank_pixel.png\" alt=\"\" width=\"1\" height=\"1\" \/><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-4619\" src=\"https:\/\/speefak.spdns.de\/oss_lifestyle\/wp-content\/uploads\/2018\/11\/blank_pixel.png\" alt=\"\" width=\"1\" height=\"1\" \/><\/pre>\n<hr \/>\n<p><img loading=\"lazy\" decoding=\"async\" class=\" wp-image-2821 alignleft\" src=\"https:\/\/speefak.spdns.de\/oss_lifestyle\/wp-content\/uploads\/2014\/08\/CC_BY_NC_SA.png\" alt=\"CC_BY_NC_SA\" width=\"65\" height=\"23\" \/><span style=\"font-size: 8pt;\"><span style=\"font-size: 10pt;\">by Speefak<\/span> | <a href=\"https:\/\/together.jolla.com\/question\/179060\/how-to-externalising-android_storage-and-other-directories-files-to-sd-card\/\" target=\"_blank\" rel=\"noopener noreferrer\">together.jolla.com<\/a> | <a href=\"https:\/\/together.jolla.com\/question\/5935\/how-to-blacklist-directories-from-being-indexed-by-tracker\/\" target=\"_blank\" rel=\"noopener noreferrer\">together.jolla.com<\/a> | <a href=\"https:\/\/together.jolla.com\/question\/148734\/map-images-added-to-gallery\/\" target=\"_blank\" rel=\"noopener noreferrer\">together.jolla.com<\/a> | <a href=\"https:\/\/together.jolla.com\/question\/203539\/guide-externalising-android_storage-and-other-directories-files-to-sd-card\/\" target=\"_blank\" rel=\"noopener noreferrer\">together.jolla.com<\/a><\/span><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Ab SFOS 4.2 nicht mehr n\u00f6tig, da Apps Daten auf der Speicherkarte oder dem Internen Speicher ablegen k\u00f6nnen Die meisten Sailfish OS kompatiblen Smartphone Modelle bieten eine Speicherkapazit\u00e4t von 32 GB, einige Modelle auch 64 GB. Daher ist es etwas schwer nachzuvollziehen, warum Jolla den Systemspeicher ab Werk nur mit 2,8 GB bemisst, zumal f\u00fcr [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[37,38],"tags":[],"class_list":["post-5059","post","type-post","status-publish","format-standard","hentry","category-sailfish-os","category-sailfish-os-archiv"],"rttpg_featured_image_url":null,"rttpg_author":{"display_name":"speefak","author_link":"https:\/\/speefak.spdns.de\/oss_lifestyle\/author\/speefak_oss\/"},"rttpg_comment":3,"rttpg_category":"<a href=\"https:\/\/speefak.spdns.de\/oss_lifestyle\/category\/sailfish-os\/\" rel=\"category tag\">Sailfish OS<\/a> <a href=\"https:\/\/speefak.spdns.de\/oss_lifestyle\/category\/sailfish-os-archiv\/\" rel=\"category tag\">Sailfish OS Archiv<\/a>","rttpg_excerpt":"Ab SFOS 4.2 nicht mehr n\u00f6tig, da Apps Daten auf der Speicherkarte oder dem Internen Speicher ablegen k\u00f6nnen Die meisten Sailfish OS kompatiblen Smartphone Modelle bieten eine Speicherkapazit\u00e4t von 32 GB, einige Modelle auch 64 GB. Daher ist es etwas schwer nachzuvollziehen, warum Jolla den Systemspeicher ab Werk nur mit 2,8 GB bemisst, zumal f\u00fcr&hellip;","_links":{"self":[{"href":"https:\/\/speefak.spdns.de\/oss_lifestyle\/wp-json\/wp\/v2\/posts\/5059","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/speefak.spdns.de\/oss_lifestyle\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/speefak.spdns.de\/oss_lifestyle\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/speefak.spdns.de\/oss_lifestyle\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/speefak.spdns.de\/oss_lifestyle\/wp-json\/wp\/v2\/comments?post=5059"}],"version-history":[{"count":0,"href":"https:\/\/speefak.spdns.de\/oss_lifestyle\/wp-json\/wp\/v2\/posts\/5059\/revisions"}],"wp:attachment":[{"href":"https:\/\/speefak.spdns.de\/oss_lifestyle\/wp-json\/wp\/v2\/media?parent=5059"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/speefak.spdns.de\/oss_lifestyle\/wp-json\/wp\/v2\/categories?post=5059"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/speefak.spdns.de\/oss_lifestyle\/wp-json\/wp\/v2\/tags?post=5059"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}