Archive for the ‘Sistemas Operativos’ category

Android como Sistema Operativo

23 abril, 2019

Hola a todos,

Continuando con el curso de Android, les comparto ahora un material que nos habla de las características de Android como sistema operativo. Un sistema operativo es un software bastante grande, que se encarga de administrar todos los recursos del sistema, atender las ordenes del usuario y mantener sus aplicaciones en ejecución.

¿qué mecanismos usa Android para realizar administrar la ejecución de un dispositivo móvil?

Aquí el enlace a las notas: http://www.nachintoch.mx/teaching/mobile_dev/android-OS.pdf

Debian: cómo ejecutar un programa o script al inicio del sistema

11 julio, 2017

Hola a todos!

Para posts futuros, estoy trabajando en tutoriales para usar un equipo con Debian como un equipo de red (router + DNS); sin perder la funcionalidad de poderse usar como un sistema de propósito general. Para esto, podemos requerir de ejecutar una configuración que se inicia convenientemente cada vez que arranca el SO.

Hoy les comparto una forma en la que podemos iniciar un programa cualquiera durante el arranque de Debian. Debian define siete estados de ejecución (conocidos como RunLevel) que podemos usar como referencia para ejecutar un programa cuando el sistema cambia de estado. Estos estados son:

0. Apagado. El sistema está operando, pero ha comenzado el procedimiento de apagado (no reinicio).

  1. Un sólo usuario. Se usa principalmente para operaciones de mantenimiento. En este estado, no es posible utilizar todos los recursos del sistema y/o aplicaciones del usuario.

2 a 5. Multiusuario. La instalación por defecto de Debian no define diferencia alguna entre los estados 2, 3, 4 y 5; permitiéndole al usuario del sistema definir estos estados a su conveniencia.

6. Reinicio. El sistema estaba en un estado entre el 1 y el 5 y se está apagando para volver a iniciar instantáneamente. El estado 6 solo abarca la fase de apagado: cuando el sistema reinicia, pasa a estado 1. Esto es importante; ya que por ejemplo, en sistemas multiboot, al reiniciar el sistema el usuario puede elegir cargar un SO diferente.


Para ejecutar un programa durante el cambio de nivel de ejecución, empezamos por crear un archivo (cuyo nombre es indiferente) en el directorio /etc/init.d

Por ejemplo, el siguiente script se llama /etc/init.d/ejemplo.sh (sólo es una instrucción)

#! /bin/bash
### BEGIN INIT INFO
# Provides: Example loging
# Required-Start: $syslog
# Required-Stop: $syslog
# Default-Start: 1 2 3 4 5
# Default-Stop: 0 6
# Short-Description: Example
# Description: Created & tested by Nachintoch, contact@nachintoch.mx
#
### END INIT INFO
echo "Loging"
case "$1" in
 start)
 echo `date` >> /home/nachintoch/boot_log.txt
 ;;
 stop)
 echo `date` >> /home/nachintoch/shutdown.txt
 ;;
 *)
 echo "Uso: ejemplo.sh {start|stop}"
 exit 1
 ;;
esac
exit 0

Para asegurarnos que el script será ejecutado, cambiamos los permisos del mismo (puede que requieras permisos de super usaurio):

# chmod 755 /etc/init.d/ejemplo.sh

Ahora, este programa (script) no será ejecutado en ningún momento durante el ciclo de vida del sistema, a menos de que sea invocado manualmente… Necesitamos indicarle al sistema el o los niveles de ejecución en los que queremos que se ejecute.

Para ello, debemos crear un enlace simbólico hacia alguno de los descriptores de estados del sistema. Estos son siete sabios de Hyrule directorios que en principio contienen los scripts que se deben ejecutar cuando el sistema cambia a su nivel…. Digo en principio, porque las buenas prácticas prefieren contener los scripts en el directorio que acabamos de estudiar /etc/init.d, pues es posible que queramos ejecutar el mismo programa durante el arraque y el reinicio; por ejemplo.

Estos siete directorios con los scripts de arranque son:

  • /etc/rc0.d
  • /etc/rc1.d
  • /etc/rc2.d
  • /etc/rc3.d
  • /etc/rc4.d
  • /etc/rc5.d
  • /etc/rc6.d

El sistema usa los nombres de los enlaces simbólicos en los siete directorios mencionados, para distinguir arranques (1, 2, 3, 4, 5) de apagados (0 y 6)… Para simplificar las cosas, al crear el enlace simbólico, podemos usar el comando update-rc.d

# update-rc.d ejemplo.sh defaults

Si queremos evitar que los scripts sean invocados cuando cambie el estado del sistema, podemos eliminar los enlaces simbólicos de los directorios /etc/rcN.d o usar update-rc.d nuevamente:

# update-rc.d -f ejemplo.sh remove

Esto conserva el script original /etc/init.d/ejemplo.sh


Antes de terminar, necesito hacer una aclaración importante. Al terminar de explicar los siete niveles de ejecución de Debian, agregué un asterisco; porque si bien lo que dice ese párrafo es cierto, hay un detalle: no necesariamente la interfaz gráfica forma parte de los estados de ejecución. Esta es una diferencia importante que hacemos con sistemas basados en Debian y otros sistemas operativos como Gentoo o Windows, donde es posible definir el arranque del sistema como el inicio de la interfaz gráfica.

Dependiendo el entorno gráfico que utilices, puedes agregar scripts también para ejecutar durante su arranque. En mi caso, uso GTK+ porque Gnome3 es demasiado pesado para mi portatil de museo. Podemos ejecutar programas al inicio de sesión gráfica de un usuario para ejecutar programas que usan la interfaz gráfica. Yo hago esto para iniciar el salvapantalla, no porque me preocupe que una imagen se quede en el monitor para siempre (es LCD), pero porque dejar el escritorio y regresar para ver la matrix es bastante satisfactorio 🙂

Además, recordemos que los estados de ejecución del 2 al 5 son personalizables; por lo que podemos modificar las instrucciones de ejecución del inicio y del arranque del escritorio para definir uno de estos estados como “entorno gráfico”; pero esa será quizá historia de otro día.


Y bien, esto es lo que hacemos para dar de alta y baja potenciales servicios durante los cambios del ciclo de vida del sistema. Espero les sea de utilidad y que el límite sea la imaginación.

Android: instalación en computadoras con arquitectura Intel x86 (PC)

4 mayo, 2017

Hola a todos!

Como quizá muchos de ustedes ya lo saben, soy un entusiasta del software/hardware libres y de los proyectos realizados bajo estas banderas. También estoy maravillado por la tecnología al rededor de los dispositivos móviles; tales como la gran variedad de sensores y las telecomunicaciones. Y seguramente también ya han notado que soy fan de una mezcla de estos dos mundos: el sistema operativo Android.

Hace un tiempo, había estado trabajando en un proyecto en el que el rendimiento y las funciones simuladas que hace el emulador del SDK; no eran suficientes para realizar las pruebas que necesitaba, así que trate de buscar una solución a mi problema.

Mientras pensaba en ello, me dí cuenta de un detalle muy obvio que hasta ese momento estaba dejando pasar desapercibido: Android es un sistema operativo. Así que me dije a mi mismo, ¿porqué no instalarlo en mi computadora en una partición nueva del disco, justo como cualquier otro SO?

Para mi alegría; descubrí que esto es mucho más fácil de lo que pensé originalmente, pues existe un proyecto que ha aprovechado el código fuente de Android; que es open source, para portarlo directamente a PC con arquitectura Intel x86 y x86_64.

Les estoy hablando del proyecto http://www.android-x86.org/ Este grupo ha lanzado varios portes de distintas versiones de Android para PC, lo cual me parece una contribución excelente al software libre y que le da muchas oportunidades a muchos usuarios.

Instalar Android en una partición independiente como SO nativo del sistema tiene algunas ventajas sobre la emulación:

  • Para empezar, el rendimiento es mucho mejor. Aún si el BIOS de tu sistema soporta virtualización por hardware, siempre se tendrá mejor rendimiento al eliminar todas las capas de abstracción posibles.
  • No necesitas instalar el Android SDK en tu sistema. Sí lo requieres sólo para el emulador, es bastante pesado y en mi opinión no es algo que valga tanto la pena sólo para emular.
  • La colección de drivers incluidos en los portes de Android para x86 es bastante buena; por lo que si tu máquina cuenta con componentes como interfaz WiFi, tarjeta gráfica; entre otros, el SO (Android) puede sacar mejor provecho de estos recursos de lo que harían otras aplicaciones como BlueStacks.
  • Puedes usar tu PC como una tablet con Android. Es decir, si tienes una laptop, ahora también puedes tener una tablet; como es mi caso. Para mi, este es un punto fuerte, ya que no soy tan fan de las tablet (pues un smartphone ofrece las mismas funcionalidades y además es teléfono) y no veo mucho sentido a adquirir una. Pero como gamer, una pantalla grande; es una pantalla grande, por lo que poder jugar los pocos juegos para móviles que encuentro atractivos en una pantalla grande (pudiendo incluso utilizar un monitor externo a través del puerto S-VGA [sí, mi portátil aún usa S-VGA y módem ¿algún problema?]) me parece genial. Ya sé que en este caso, las Phablets son una alternativa; pero creo que el móvil que estoy usando aún tiene bastante vida útil por delante como para jubilarlo por un simple capricho… Y tiene un tamaño razonable para ser un teléfono…
  • Otra ventaja basada en el punto anterior: si tienes una computadora vieja por allí arrumbada y sin propósito en la existencia, puedes darle una vida nueva como dispositivo Android… O instalarle Windows XP o 95 para jugar algunos clásicos.

Así es que si tú como yo, encuentras útil contar con un sistema con Android instalado en una máquina; a continuación les explico cómo hacerlo.


Comencemos por descargar la versión de Android que queremos tener. Para ello, vamos a http://www.android-x86.org/download y seleccionamos la versión de Android que deseamos. Además de la variedad de versiones de Android, disponibles, también hay algunas versiones de CyanogenMod disponibles para quienes lo prefieran.

Tal vez notes que la versión que quieres descargar se presenta en varias opciones:

  • x86 (32 bit) – Elige esta opción si tu procesador es de 32 bits. Un procesador de 64 bits también puede ejecutar esta versión, pero mejor aprovechalo al máximo.
  • x86_64 (64 bits) – Elige esta opción SOLO si tu procesador es de 64 bits. No es posible ejecutar un programa compilado para 64 bits en un sistema de 32.
  • Legacy – Elige esta opción si el BIOS de tu sistema es (o soporta) Legacy (antiguo – viejo). Normalmente lo sabes si al encender la máquina puedes ver la pantalla del BIOS y si al presionar teclas como F2 o F8 antes de que comience a cargar el SO tienes acceso a la configuración del mismo.
  • EFI – Elige esta opción si el BIOS de tu sistema es reciente. Normalmente usas un BIOS EFI si al encender tu máquina pasas de apagado a “cargando Windows” sin ver un cursor parpadeando ni letras blancas que con alguna descripción de tu sistema.
  • Live – Elige esta versión si en lugar de instalar Android en el sistema sólo quieres ejecutarlo desde un CD o una USB sin instalarlo. La desventaja de hacer esto es que cualquier cambio que hagas puede perderse (sobre todo su ejecutas en vivo desde disco), por lo que cualquier configuración o app que instales se perderá siempre que apagues el sistema.
  • ISO Image – Elige esta opción si vas a quemar la imagen en un CD o DVD. Estas imágenes también puedes “quemarlas” en una USB.
  • USB Image – Elige esta opción si vas a “quemar” la imagen en una USB.

Una vez que hayas descargado la versión de Android de tu elección, ahora hay que quemarla. Si vas a instalar desde CD o DVD, simplemente usa tu programa quemador preferido (el quemador por defecto de Windows, Roxio, Burner…) Si vas a instalar desde una USB, puedes usar UNetbootin desde Windows, Mac y Linux, Win32 Disk Imager en Windows; o desde sistemas basados en Debian hacer:

# cp ruta/a/la/imagen/descargada /dev/sdX
# sync

Recuerda reemplazar la “X” en “sdX” por la letra que tenga asignado el directorio donde se ha montado la USB en la que quieres quemar la imagen.


Ahora vamos a crear una partición para Android. Este procedimiento es el mismo que seguirías para instalar Linux o cualquier otro SO en un sistema multiboot; por lo que he escrito una entrada independiente para este paso.

Android x86 soporta las particiones en formato NTFS, FAT32, EXT2 y EXT3, pero no puede escribir nada en particiones FAT32; por lo que es poco recomendado. En mi opinión, usar una partición EXT3 sería lo mejor, aunque no le veo nada de malo a usar EXT2 o NTFS. También soporta que el SO coexista con otro en la misma partición, pero a mi gusto esto es bastante sucio y es preferible dedicarle su propio espacio.

Puedes saltarte este procedimiento y pasar al siguiente párrafo si prefieres que Android sea el único SO del sistema; pues el instalador puede formatear automáticamente la partición del disco que le indiques, si no la formateas, entonces el SO coexistirá con la información que ya esté en la partición; incluyendo coexistir con otro SO (pero ya di mi opinión al respecto).

Varios usuarios reportan que usando particiones de desde 5Gb se obtienen buenos resultados; pero en mi opinión, recomendaría usar entre 16 y 32 Gb que es lo que usualmente traen los dispositivos con Android.

Da clic aquí para abrir el tutorial sobre cómo gestionar particiones usando GParted con Debian Live.

Bien, ahora que tenemos una partición, podemos continuar con la instalación.


Previamente a iniciar la instalación debes insertar el medio en el que has quemado la imagen de Android (el disco o la USB). Enciende la máquina y asegúrate de arrancar desde el medio correcto (disco o USB); para esto puede que necesites revisar las opciones de arranque de tu BIOS.

Una vez que arranques desde el medio con la imagen, te aparecerá un menú muy simple en modo texto. Elige la opción “Install Android to harddisk“.

menu

Ahora debes elegir la partición en la que quieres instalar Android. Si deseas reformatear, selecciona la opción con el sistema de archivos que deseas usar. Recuerda que esto borrará todo lo que haya en la partición, así que asegúrate de no estar perdiendo nada importante. Si ya habías formateado la partición o conservar la información que haya (esta es la opción que eliges para hacer coexistir Android con otro SO), escoge “Do not format“.

partition

ext3

A continuación, el instalador preguntará si deseas instalar GRUB. Si ya cuentas con un sistema multiboot; elige que NO, ya que podrías sobreescribir el cargador que hayas configurado previamente. Si tu sistema aún no es multiboot o Android será el único SO de tu equipo, elige que SÍ.

grub

Después de esto sólo nos quedará esperar a que los archivos sean descomprimidos y copiados en la partición indicada y ¡listo!


Si al reiniciar tu sistema GRUB o tu cargador de arranque no muestra a Android o algún otro de los SO que tengas instalado, puedes consultar el tutorial que he hecho para reconfigurar GRUB.


¡Uf! Puede que parezca un poco tedioso, pero vale la pena y es bastante divertido contar con una “tablet” adicional. Puedes dar de alta una cuenta de Google para usar la Google Play como en cualquier otro dispositivo e instalar apps tal y como lo harías en cualquier teléfono o tablet con Android, ¡genial no?

FB_IMG_1491502299797

FB_IMG_1491502270741


Antes de terminar, quiero aclarar que las instrucciones aquí las he probado y me han funcionado bien. No puedo responsabilizarme si algo sale mal y no puedes arrancar ningún SO, pierdes información o se daña el equipo con el que hayas intentado seguir los pasos…


En fin, espero le sea de utilidad a más de uno y que el límite sea la imaginación.

Cómo gestionar particiones usando GParted con Debian Live

25 abril, 2017

Hola a todos!

Estoy redactando una entrada donde explico cómo instalar un particular SO en una PC, pero en el proceso invito a crear sistemas multiboot; es decir, tener varios sistemas operativos instalados en una misma máquina y poder elegir el deseado al arranque.

Para ello, creí importante crear un post independiente para explicar cómo gestionar particiones en el disco; por lo que estamos aquí. Si tienes curiosidad sobre los sistemas de archivos, te invito a leer el post que he escrito al respecto.

Bien; sin más, comencemos.


Es sumamente importante antes de empezar, realizar un respaldo de toda la información en disco, ya que siempre existe; por diminuto que sea, el riesgo de que algo salga mal durante el procedimiento. En lo personal, he realizado este procedimiento varias veces y nunca he perdido nada realmente; he desconfigurado los cargadores de arranque, pero eso tiene solución.

No me hago responsable por la pérdida de información, programas o Sistemas Operativos o daños en el sistema que puedan ocurrir…. Aunque insisto, he hecho esto varias veces y nunca he tenido mayores problemas.


Primero debemos empezar por contar un un SO en vivo. Hasta el disco de instalación de Windows cuenta con un gestionador de particiones, pero a mi gusto es bastante limitado, por lo que usaré Debian Live; que trae preinstalado GParted, una aplicación para gestionar particiones que a mi gusto es bastante simple y buena. Si no quieres usar Debian Live, puedes optar por cualquier otra distribución de Linux que cuente con GParted u otro gestionador de particiones.

Para descargar Debian Live, vamos a la página de descargas de Debian y elegimos la versión deseada (amd64 para PC de 64 bits o i386 para PC de 32 bits) de Debian Live: https://www.debian.org/CD/live/


Una vez que hemos descargado la imagen del SO en vivo, procedemos a quemarla en un medio adecuado. Las imágenes de Debian Live pueden escribirse indiferentemente un un disco (CD, DVD) o en una memoria USB.

Para quemar un CD, DVD usamos el quemador de nuestra preferencia (por ejemplo el quemador por defecto de Windows, Roxio, Burner, etc…).

Para “quemar” una USB, podemos usar herramientas como Win32 Disk Imager, o desde la consola de un sistema Debian hacer:

# cp ruta/a/la/imagen/descargada /dev/sdX

# sync

Es importante recordar que debemos cambiar la X por la letra que le haya asignado el SO a la unidad de USB en la que queremos grabar la imagen.


Ya que tenemos un medio apropiado con la imagen quemada, lo siguiente será insertar el medio en la máquina con el disco duro donde queremos administrar las particiones. Apagamos la máquina si estaba encendida (que podríamos necesitar; por ejemplo, para insertar el disco primero).

Lo siguiente depende del BIOS; ya que si es “legacy”, mostrará al arranque opciones para seleccionar el medio de inicio deseado. Normalmente esto se hace presionando F2, F8, F10 u F12 al arranque; pero debes verificarlo en tu modelo de PC.

Los BIOS EFI pueden ser un poco más problemáticos en este sentido, por lo que te recomiendo buscar un tutorial específico para tu modelo de PC y versión de BIOS para arrancar desde el medio indicado (el disco o la USB).


Cundo el sistema inicie desde el medio correcto, deberemos ver una pantalla como la siguiente:

menu-d

Podemos iniciar usando la primer opción. Después de un rato (sobre todo usando un disco, esto puede tomar algunos minutos), deberías ver cargado el escritorio del sistema. Si después de varios intentos no logras iniciar adecuadamente, puedes intentar con las opción 686-pae (la tercera). Si no puedes cargar la interfaz gráfica; no podrás usar GParted para administrar las particiones, pero aún podrías hacerlo con programas en modo texto en la consola del sistema.


Una vez que ha cargado el escritorio, abrimos “Gparted” desde el menú de aplicaciones.

Cuando inicie GParted, deberás ver una ventana como esta:

gparted

El diagrama en la parte superior de la ventana, representa la unidad seleccionada. Cada división rectangular de colores es una partición. El relleno amarillo dentro de cada rectángulo representa el espacio ocupado en cada partición. El candado representa que la partición está montada; y puesto que no debemos intentar modificar particiones montadas, no nos permitirá modificarlas a menos que sean desmontadas.

Lo anterior es una razón importante del por que la administración de particiones debe hacerse en vivo y no durante la ejecución de algún SO en alguna de las particiones, pues no podemodeberíamos desmontar la partición del SO; y si es una distribución de Linux, tampoco podemos desmontar la partición del área de intercambio.

Con esto dicho, elegimos el disco al que le queremos modificar las particiones. Para esto podemos desplegar la lista que aparece al hacer clic en el botón que indica la unidad que se está desplegando actualmente; en mi caso /dev/sda.


Supongamos que queremos crear una nueva partición para instalar un nuevo SO. Recuerda que un disco sólo puede tener 4 particiones “físicas” a la vez, por lo que si requieres hacer más de 4 particiones por alguna razón; una de las 4 particiones físicas deberá servir como anfitrión de particiones virtuales. No hay mayor diferencia entre una partición real y una virtual para el SO o los datos que contenga la partición, por lo que esto no representa ningún inconveniente.

Será muy raro que el disco contenga de entrada “espacio sin asignar” suficiente como para alojara un SO. Como podrá ver en la imagen anterior, en mi caso hay 1MB entre mi partición con Windows y la partición con Debian. En mi caso, este espacio ha quedado para siempre sin uso por las características de las particiones que tengo; es posible que al particionar te quede un espacio diminuto similar sin uso entre particiones, no te angusties y déjalo pasar; es sólo 1MB.

Así que, vamos a crear un espacio suficiente como para alojar un SO. Para ello, seleccionamos una partición que tenga suficiente espacio libre (en blanco y no en amarillo) para hacerla pequeña y alojar en ese espacio nuestro nuevo SO. Para ejemplificar, voy a simular que hago pequeña la partición de Windows.

Para esto, damos clic derecho sobre la partición que queremos hacer pequeña y del menú emergente seleccionamos “->| redimencionar/mover”. Aparecerá un cuadro de diálogo como el siguiente:

gparted1


Ahora, ya sea que prefieras usar el slider o ingresar el valor exacto en MB del tamaño de la partición que quieres, puedes hacerlo aquí para crear el espacio vacío para el nuevo SO.

Si quieres ser muy preciso en el tamaño de GB que quieres para el SO, recuerda que 1GB = 1024 MB. Si no te interesa tanto la precisión, simplemente usa 1GB ~ 1000MB y multiplica 1024 o 1000 por el número de GB que quieres dejar para el nuevo SO.

Nota que puedes abrir el espacio para el SO al principio o al final de la partición. En general, es indiferente donde hagas el espacio, incluso esto es conviene; por ejemplo, yo puedo decrementar tanto la partición con Windows como la que tiene Debian en tamaño para tener un espacio suficientemente grande para otro SO; para ello, decrementaría la partición con Windows al final y la partición con Debian al inicio. Las particiones deben ser contiguas: no puedes usar huecos por todo el disco como una sola partición.

También podemos mover una partición hacia los lados si tiene espacio libre para hacerlo. Esto también es bastante útil, ya que por ejemplo; podría también reducir la partición del área de intercambio de Linux para tener más espacio para una nueva partición. Pero como las particiones no pueden ser discontinuas, entonces puedo mover todas las particiones para agrupar todo el espacio libre en un sólo bloque.

No tenemos que preocuparnos por los archivos contenidos en la partición a la hora de moverla, ya que GParted automáticamente se encargará de mover los archivos adecuadamente.

El detalle de reducir una partición con un SO desde la izquierda o moverla;  es que puedes provocar que el SO no inicie, ya que el programa cargador tiene una referencia a la primer dirección de memoria en disco del SO; por lo que al mover la partición o al menos su inicio, movemos los archivos del SO y la referencia que tenga el cargador de inicio ya no será válida y marcará un error al tratar de cargar el SO.

Por esto; si necesitas mover particiones o recortarlas desde el inicio (desde la izquierda) es muy recomendable que al final de este tutorial sigas alguno de estos también si te resulta de utilidad:

Cómo reparar el cargador de inicio cuando hemos movido Windows de su lugar.

Cómo reparar GRUB o identificar SO nuevos y agregarlos al menú de arranque.


Así, al recortar y mover particiones tendremos un nuevo espacio “no asignado” listo para ser formateado. Cabe aclarar que los cambios que hayas realizado hasta este punto no surtirán ningún efecto real en el sistema hasta que presiones el botón “Aplicar”; y aún cuando lo hagas GParted te pedirá que confirmes las acciones pues podrían destruir la información contenida en el disco (por ejemplo al borrar una partición, hacerla más pequeña que lo que ocupan los archivos ya almacenados en ella, etc). Verás algo como esto en la ventana de GParted:

gparted2


Ahora vamos a aprovechar este espacio vacío para crear una partición. Para esto, damos clic derecho sobre el rectángulo gris. Del menú emergente, elegimos “nueva”.

En este punto es necesario aclarar que si tienes 4 particiones; como en mi caso, GParted no podrá crear una nueva partición, pues 4 particiones es el límite físico para crear particiones. Para crear nuevas particiones debemos primero crear particiones lógicas.

Para crear una partición lógica debemos sobreescribir el contenido de una partición existente, por lo que elige bien y respalda archivos antes de continuar.

Si tienes menos de 4 particiones puedes continuar a la siguiente sección omitiendo este punto. Para crear una partición lógica; como he comentado, debemos comenzar por formatear una de las 4 particiones físicas existentes.

Damos clic derecho sobre la partición que queremos que aloje la particiones lógicas y del menú emergente elegimos “formatear cómo” y luego “extendida”. Si no aparece la opción para formatear la partición como extendida debes intenta lo siguiente:

  • Si tienes espacios no asignados, comprueba que ninguno de ellos sea una partición extendida.
  • Desmonta el la partición del área de intercambio.
  • Trata de dejar un espacio de 1MB de espacio no asignado entre particiones.

Usualmente la partición de área de intercambio se trata como a una partición extendida, por lo que es conveniente formatearla directamente como “extendida” en lugar de “linux-swap”. Si usas un SO basado en Linux (excepto Android hasta donde sé), forzosamente necesitas el área de intercambio, por lo que posteriormente deberás crear una nueva dentro de la partición extendida. Lo anterior es importante ya que no es posible contar con más de una partición extendida.

gparted3

Ahora cuentas con una partición extendida. Es sobre esta partición que puedes escribir tantas particiones lógicas como desees.


Para crear una partición en espacio no asignado, hacemos los siguiente:

Damos clic derecho sobre un espacio “sin asignar” y del menú emergente, elegimos “nueva”. Se abrirá el cuadro de diálogo para modificar una partición. En él, ingresamos el tamaño deseado en MB, el sistema de archivos y la etiqueta de la partición si lo deseamos también.

gparted4

Si queremos crear una partición lógica en una partición extendida, el procedimiento es el mismo que el anterior, pero en lugar de seleccionar y dar clic derecho sobre un espacio “sin asignar”, escogerías la partición extendida.

Al final damos clic en “añadir” y veremos la nueva partición indicada en el diagrama del dispositivo.

gparted5


Los cambios que hemos hecho hasta ahora son virtuales; no tendrán efecto hasta de que demos clic en el botón con una paloma verde y grande “aplicar”. Entonces recibiremos una advertencia de que podríamos estar perdiendo información y que los cambios son irreversibles. Si estás seguro de lo que estás haciendo, da clic en aceptar y espera a que GParted termine de formatear tu dispositivo de almacenamiento.


Reitero que si has modificado una partición que contiene Windows podrías necesitar reconfigurar el cargador de Windows usando el disco de instalación. Si has modificado particiones con un SO, podrías necesitar reconfigurar o instalar un cargador de arranque como GRUB. Cualquier sea el caso, podrías encontrar útiles los siguientes post:

Cómo reparar el cargador de inicio cuando hemos movido Windows de su lugar.

Cómo reparar GRUB o identificar SO nuevos y agregarlos al menú de arranque.


Ahora tienes una nueva partición lista en la que puedes almacenar tu información o instalar un SO. La etiqueta de las particiones (por ejemplo, si tenemos sda1, sda2, sda3), serán las mismas siempre que veas el dispositivo; incluso con SO diferentes y corresponden a su orden de creación (sda1 fue la primer partición escrita en el medio, sda2 la segunda y sda3 la última).

Lo anterior es útil porque puedes recordar la etiqueta de la partición que acabas de crear e indicarla al instalar tu nuevo SO y evitar sobrescribir el SO en una partición ya ocupada… Lo cual no debe ser muy lindo.

En fin, espero más de uno encuentre utilidad en esto. Que el límite sea la imaginación… Y la arquitectura de la interfaz SATA conectada al HDD.

¿Discos Duros o de Estado Sólido? ¿Sistema de archivos? ¿Qué son?

19 abril, 2017

Hola a todos!

Espero no desbordar el stack de ejecución; pero escribiendo un post sobre instalación de sistemas operativos multiboot, me di cuenta que necesitaba un post sobre cómo gestionar particiones y me di cuenta que sería buena idea escribir un post sobre las diferencias entre los tipos de Discos Duros y qué es un Sistema de Archivos. Así que comencemos.

StackOverflowError

Caused by: TooManyPostsDependenciesError


Discos Duros

El disco duro; en cualquiera de sus presentaciones, es la unidad de almacenamiento por defecto hoy en día. Digo en cualquiera de sus presentaciones porque seguramente ha notado que hay al menos dos tipos: los “normales” y los de estado sólido.

Los “normales” son los verdaderos y auténticos discos duros que han estado con nosotros desde casi siempre. De hecho; se les dice así (disco duro) porqué si uno abre la caja a la que llamamos “el disco duro”; encontraremos uno o más platos de metal bastante rígidos en su interior, acompañados por una cabeza lectora similar a la de una tornamesa (¿todavía hay tornamesas por el mundo?): literalmente son discos duros.

hdd

Si abriéramos un “disco duro” de estado sólido, encontraríamos varios chips y tarjetas… Y ningún disco a la vista capitán… Es muy similar a lo que encontramos dentro de una memoria flash USB.

InsideanSSD.jpg

Se les dice discos duros por costumbre, pero no son discos en ningún sentido (bueno, no he visto que los fabriquen con forma redonda). La computación tiene problemas de nomenclatura en varias áreas…

Los discos duros “normales” son más lentos que los de estado sólido por el mecanismo de lectura y escritura que es muy diferente en ambos:

  • Los “normales” requieren girar los discos duros mientras la aguja escribe o lee puntos magnéticos en la superficie de los discos. Las piezas mecánicas toman tiempo en comenzar a girar, ya que el dispositivo debe rotar a una velocidad constante para leer y escribir: las operaciones no pueden realizarse mientras los discos aceleran. Además, la cabeza también es una pieza mecánica y le toma tiempo moverse sobre los discos. Tampoco puede operar mientras ella misma en movimiento.
  • Los de estado sólido, funcionan muy similar a una RAM: mediante señales eléctricas direccionan memoria y en unos cuantos ciclos de reloj escriben o leen un paquete de datos en una dirección de memoria sin hacer más. Al prescindir de piezas mecánicas; incluso los “discos duros” de estado sólido más lentos y económicos suelen ser mucho más rápidos que los mejores discos duros “normales”.

Además, los discos duros “normales” son extremadamente delicados: son muy susceptibles a las vibraciones, por lo que llevar un disco duro en la guantera del auto o dejarlo caer desde una altura mínima, puede ser fatal para el mismo; pues las piezas mecánicas pueden moverse de su lugar o la cabeza puede golpear los discos arruinando la información de uno o varios sectores (más adelante explicaré qué es un sector).

Los “discos duros” de estado sólido son más confiables, pues hay que darles un buen golpe para desoldar los chips y buses de la tarjeta.

…Y lo digo por experiencia: un “disco” de estado sólido (y un buen mantenimiento) hace la diferencia entre que una máquina de 10 años se comporte como una máquina de 10 años o ponga batalla contra las máquinas actuales.

Pero; pese a todas estas diferencias, el objetivo de ambos medios de almacenamiento es exactamente el mismo: almacenar mucha información de forma persistente.

Entonces, los HDD (Hard Drive Disk o Unidad de Disco Duro) y los SSD (Solid State Disk o Disco de Estado Sólido) almacenan o leen datos dependiendo de sus mecanismos de información pero… ¿y luego? Bien, seguramente has escuchado alguna vez el término “sistema de archivos”, como lo son “FAT”, “NTFS”, “EXT”; entre otros, y si no; no te preocupes que para eso es este post.


Sistema de archivos

Sabemos que podemos guardar el archivo “hola.txt” y “Guau.java” en el disco… Pero… Si guardamos “hola.txt” primero, ¿dónde guardamos “Guau.java” de forma que no se encime sobre “hola.txt”? ¿cómo representamos el nombre del archivo?  Y si seguimos guardando archivos… ¿cuantos y de qué tamaño había antes del que quiero leer para poderlo leer desde su inicio; su primer dirección de memoria, y no leer partes de otros archivos previos o empezar a leerlo por la mitad?

El sistema de archivos son básicamente meta-datos en el HDD; y esa meta-información nos permite resolver todos los problemas que tendríamos de no usar un sistema de archivos. El sistema de archivos describe un formato (de allí que se formateen los discos. No, formatear no significa instalar o reinstalar Windows. Y formatear no es la única forma de reparar Windows; en sentido estricto, eso ni siquiera es reparar…)

El formato divide el disco en “partes” de forma que los archivos se agrupen en esas “partes” del disco. Formalmente, a estas “partes” se les conoce como sectores. Así, es más fácil para el mecanismo de lectura y escritura localizar un archivo por el sector en el que vive. Es similar al cómo las ciudades se dividen en códigos postales; ¿te imaginas tener que entregar una carta en una ciudad de un millón de habitantes -o muchísimos más- sin tener idea de por donde empezar?

Esta es una de las razones por las que en tiempos remotos, los discos flexibles escritos en una Mac no se podían leer en una PC: los sectores del disco se disponen de forma diferente en los formatos que trabajan y sólo usando un driver o dispositivo especial podríamos hacerlo.

A su vez, los sectores se dividen en bloques de memoria que alojarán parte de un archivo. Estas serán las unidades de almacenamiento que usará el sistema de archivos. Puesto que son la unidad de almacenamiento, si un archivo usa menos unidades reales de las que abstrae el sistema de archivos, ese espacio real sobrante no podrá ser utilizado por ningún otro archivo y desgraciadamente será espacio despreciado en disco… Unas por otras, ¿no?

Un ejemplo de lo anterior, si un archivo sólo es de 13 bits, pero el sistema de archivos divido cada sector en bloques de 8bits (1 byte), entonces tendrá que usar el número de bloques mínimo indispensable para alojar 13bits: 2 bloques; es decir, el archivo ocupará en disco 16bits (2 bytes) en lugar de 13. Los 3 bits sobrantes serán desperdiciados, pues nadie más podrá usarlos.

Y finalmente, la cereza del pastel en el sistema de archivos es la tabla de innodos. Un innodo es un objeto (cosa pues) que describe un archivo: cómo se llama, cuando fue creado, quién es el dueño, a qué grupo de usuarios pertenece, cuándo fue modificado, quién lo modificó por última vez, en qué sector vive, en qué bloque empieza y qué tamaño tiene (para poder leerlo completamente); y puede describir otras cosas de los archivos.

El tamaño de un innodo restringe el tamaño que puede tener un archivo en disco. Por ejemplo, si el sistema de archivos es de 32 bits (te estoy viendo FAT32), no es posible guardar archivos que sean de más de 4GB; pues un entero de 32 bits a lo mucho puede representar 4GB. Por eso me gusta formatear mis memorias USB a NTFS.

La tabla de innodos, no es más que la colección de todos los innodos. El tamaño de la tabla depende del sistema de archivos en cuestión y es posible acabarnos los innodos aún cuando el disco no está lleno (lo cual a estas alturas del partido es muy poco común) y no es posible modificar la tabla de innodos para agregar más: ese espacio será desperdiciado como en los bloques.

La tabla de innodos vive en el disco también; junto con los archivos. Y es la tabla de innodos (y a veces otros descriptores) la que ocupa un cierto espacio en disco de forma inicial, por lo que al formatear un disco JAMÁS podremos usar el 100% de su capacidad física y el Sistema Operativo nos informará que el disco tiene una capacidad menor a la que anuncia el vendedor.

Para más información respecto a lo tratado en esta parte del post, les recomiendo ampliamente el siguiente excelente vídeo de Computerphile:


Espero que esto les sea de utilidad y que les ayude a entender un poco mejor las diferencias y equivalencias entre los HDD y los SSD y porqué los sistemas de archivos son importantes.

Que el límite sea la imaginación. Y el tamaño de la tabla de innodos… Y el tamaño de los bloques en cada sector… Y el contador del tamaño de archivo en cada innodo…

Memory Rhapsody: un tributo a la nerdancia

30 marzo, 2017

Hola a todos!

En un intento más por parecer divertido; hace ya un año o más, escribí después de una noche de insomnio forzado (que casi no me tocan) esta adaptación del eterno clásico de Queen “Bohemian Rhapsody”; donde el personaje le anuncia a su madre que debe huir y esconderse por haber asesinado a alguien de un disparo y comienza a suplicara por su libertad mientras expresa su miseria y arrepentimiento.

Aquella noche de insomnio forzado, trabajaba en un programa en C que resolvía el problema del consenso para dos procesos (procesos de UNIX reales y no nada más los que se pueden modelar con hilos o procesos ligeros). Aprendí varias cosas aquella noche; cómo porqué no siempre es buena idea permitir que el compilador optimice ciertas variables o que usar registros como memoria compartida es mala idea. Pueden ver el post que publiqué en su momento aquí.

A la mañana siguiente; iba con el miedo de quedarme dormido en el metro y darle varias vuelta a la ciudad, cuando debería de haber estado en el trabajo. Así que tenía que mantener la mente suficientemente ocupada como para no dormirme sin un expendio de café a la redonda. No podía dejar de pensar en lo que había estado haciendo durante la noche mientras escuchaba música. En eso, escuché Bohemian Rhapsody y no pude evitar imaginar que el personaje era un proceso pidiendo clemencia al sistema operativo por haber efectuado una operación ilegal; y después empieza a expresara que su miseria se origina en sus “errores de programación”… Y así fue, como escribí esta burda adaptación “Memory Rhapsody”.

Espero les guste y les cause una sonrisa; como a mi siempre me la causa la oración al C.

Is this a real space? Or is just a null pointer? Caught in a bus flow, No escape from user misspells.

Open a file, Look for a EOF, And read…

I’m just a user process, I need no privileges.

Because I easy fork, Easy goto, Little time, Little address.

Any way the scheduler works, Doesn’t really bother to me, To me.

Papa, Just kill a child, Call a kill against his will, System accepted, now its dead.

Papa, Processor time had just begun, But now I’ve created a system inconsistency.

Papa… Oh… Didn’t meant to SEGFAULT, If I’m not responsive again next round.

Carry on, carry on, As if were hosted by Windows…

Too late, The ticks are gone, SYSTERM returned successful, Messages run down through my pipe.

Goodbye whole system, I’ve goto, Gotta leave behind a corrupted memory.

Papa… Oh… I don’t want to die, Sometimes I wish I’ve never been forked at all…

I see a little siluetto of a thread, Scaramouche Scaramouche will you do the system call?

5 to 0 V very very frightening me! Dennis Ritchie! Dennis Ritchie! Dennis Ritchie let me go! Magnifico!!

I’m just just a user process, No body loves me, He’s just a user process, from a user application, Spared from the system by his coding errors!

Easy goto Easy return, Will you let me go?

Bismillah no! Do you think this’ NT? Let me go! Bismillah no!

Kernel’ll no let you go! Bismillah no! Kernel’ll no let you go! Let me go… No! No! No! No! No! No! No!

Oh papa mio papa mio, Papa mio let me go…

Beelzelebub has a loader aside for me, For me, for me, for me!

So you think you can block me and change my stats?

So you think you can instance me and let me to die?

Oh! System! Can you do this to me system?

I just wanna get out I just wanna get messaged remotely

Oh… Oh yeah! Oh yeah!

Nothing really bothered me… Any one can read.

Nothing really matters, Nothing really matters to me…

Any way the scheduler works…

Cómputo concurrente: herramientas de sincronización y concurrencia estándares en Python, C y C++

6 marzo, 2017

Hola a todos!

Una vez más, esta es una publicación que tiene ya rato en la sala de espera (unos 6 meses :S ); pero como mala hierba nunca muere, estoy de vuelta para compartir más notas de clase 😛

En esta ocasión, les paso un par de notas:

Como siempre, espero que les sea de utilidad y que el límite sea la imaginación.


A %d blogueros les gusta esto: