\documentclass[12pt,a4paper]{article} \usepackage[spanish]{babel} \usepackage[ddmmyyyy]{datetime} \usepackage{graphicx} \title{Organización Lógica De Un Disco Duro} \author{Nicolás A. Ortega} \date{} \begin{document} \maketitle \pagebreak \section{Hoja De Control Del Documento} \begin{table}[h!] \begin{center} \caption{Documento/Archivo} \label{tab:document} \begin{tabular}{|l|c|l|c|} \hline {\bf Fecha Última Modificación} & \today & {\bf Versión/Revisión} & 1.0 \\ \hline {\bf Fecha Creación} & 13/10/2021 & \hfill & \hfill \\ \hline {\bf Fecha Finalización} & \today & \hfill & \hfill \\ \hline \end{tabular} \end{center} \end{table} \begin{table}[h!] \begin{center} \caption{Registro De Cambios} \label{tab:registro-cambios} \begin{tabular}{|c|c|c|} \hline {\bf Versión/Revisión} & {\bf Página} & {\bf Descripción} \\ \hline 1.0 & Todas & Fomato básico documento. \\ \hline \end{tabular} \end{center} \end{table} \begin{table}[h!] \begin{center} \caption{Autores Del Documento} \label{tab:autores} \begin{tabular}{|c|c|} \hline {\bf Apellidos, Nombre} & {\bf Curso} \\ \hline Ortega Froysa, Nicolás A. & 1 \\ \hline \end{tabular} \end{center} \end{table} \begin{table}[h!] \begin{center} \begin{tabular}{|p{4cm}|p{4cm}|p{4cm}|} \hline {\bf Preparado} & {\bf Revisado} & {\bf Aprobado} \\ \hline Ortega Froysa, Nicolás A. & \hfill & \hfill \\ \hline \end{tabular} \end{center} \end{table} \pagebreak \section{Particiones En Windows} \begin{figure}[h!] \begin{center} \includegraphics[width=0.7\linewidth]{imgs/0.png} \caption{Cambiar tamaño de partición.} \label{fig:resize} \end{center} \end{figure} Para completar esta tarea, tuve que hacer uso de una máquina virtual de Windows, y decidí usar la herramienta de AOMEI Partition Assistant, ya que tenía más capacidades en su versión gratuita (estándar) que MiniTool. \begin{figure} \begin{center} \includegraphics[width=0.75\linewidth]{imgs/1.png} \caption{Crear partición primaria.} \label{fig:create-primary} \end{center} \end{figure} Al trabajar en una máquina donde el disco virtual entero ya se estaba usando para Windows (volumen C), lo primero que hice fue cambiar el tamaño de aquella partición para tener espacio para trabajar (figura \ref{fig:resize}). A partir de ahí empecé a crear las nuevas particiones (figura \ref{fig:create-primary}). Estas particiones las he creado como particiones primarias, y venía por defecto formateado con NTFS. \begin{figure} \begin{center} \includegraphics[width=0.75\linewidth]{imgs/3.png} \caption{Crear partición lógica.} \label{fig:create-logical} \end{center} \end{figure} \begin{figure} \begin{center} \includegraphics[width=0.75\linewidth]{imgs/6.png} \caption{Cambiar formateado de partición.} \label{fig:change-format} \end{center} \end{figure} A partir de esto, empecé a crear las particiones lógicas. Utilizando el interfaz gráfico pude crear las tres particiones lógicas con las etiquetas \texttt{Datos}, \texttt{Juegos}, y \texttt{Videos} (figura \ref{fig:create-logical}). Luego, cambié el formateado de la partición con la etiqueta de \texttt{Datos}, de NTFS a FAT32 (figura \ref{fig:change-format}). Esto cuando lo intenté hacer con el MiniTool, era una característica limitada a los programas con licencia profesional, y por eso decidí cambiarme a otra herramienta que tuviera más capacidades en su versión gratuita (i.e.\ AOMEI Partition Assistant). \begin{figure} \begin{center} \includegraphics[width=0.75\linewidth]{imgs/7.png} \caption{Eliminar partición.} \label{fig:eliminate-partition} \end{center} \end{figure} \begin{figure} \begin{center} \includegraphics[width=0.75\linewidth]{imgs/11.png} \caption{Formatear como FAT.} \label{fig:format-fat} \end{center} \end{figure} Eliminé después la última partición, \texttt{Videos} (figura \ref{fig:eliminate-partition}), para poder liberar espacio. A partir de ahí pude crear dos particiones lógicas con ese espacio: \texttt{ex0} y \texttt{ex1}. Éstas las formateé con FAT32 y FAT respectivamente (figura \ref{fig:format-fat}). \begin{figure} \begin{center} \includegraphics[width=0.75\linewidth]{imgs/12.png} \caption{Fusionar particiones.} \label{fig:merge} \end{center} \end{figure} Luego, intenté fusionar ({\em merge}) dos particiones -- la partición primaria de \texttt{F} y la partición lógica de \texttt{Datos} (figura \ref{fig:merge}), y aunque no me decía que fuera directamente imposible, sí que me lo impedía. El mensaje decía que no se puede porque se tienen que aplicar todos los cambios (a.k.a.\ transacciones) que se hayan acumulado hasta entonces. Esto no lo hice ya que entonces cabe la posibilidad de romper la máquina virtual que la uso para otras asignaturas. \begin{figure} \begin{center} \includegraphics[width=0.75\linewidth]{imgs/13.png} \caption{Cambiar partición activa.} \label{fig:activate} \end{center} \end{figure} Finalmente cambié la partición activa para la iniciación de la máquina (figura \ref{fig:activate}). Me mencionó que es posible que esta acción pueda desactivar otras particiones, lo cual tendría sentido ya que sólo se puede iniciar de un sistema operativo a la vez. \pagebreak \section{Particiones En UNIX (Linux + fdisk)} Para esta sección, se va a crear primero una imagen virtual sobre la cual podremos hacer los cambios que queremos hacer. Esto se hace para no trabajar con un dispositivo de almacenamiento externo, y simplificar la tarea, además de poder cumplir mejor con los requisitos de la tarea. Esto se hace mediante el comando \texttt{dd}, que funciona a bajo nivel, copiando byte por byte la información. Para crear la imagen virtual, corremos el siguiente comando: \begin{verbatim} $ dd if=/dev/zero of=virt-drive.img bs=1M count=30720 30720+0 records in 30720+0 records out 32212254720 bytes (32 GB, 30 GiB) copied, 382,355 s, 84,2 MB/s \end{verbatim} En esta ejecución vemos varios parámetros del comando. Éstos tienen el significado siguiente: \begin{itemize} \item \texttt{if=/dev/zero}: la primera parte (\texttt{if}) significa ``input file'', y es el archivo que se usará para copiar. En este caso estamos usando un archivo especial, \texttt{/dev/zero}, que simplemente lee ceros. \item \texttt{of=virt-drive.img}: los caracteres \texttt{of} significan ``output file'', y es el archivo destino de los datos que se copian. Lo guardaremos todo en un archivo nombrado \texttt{virt-drive.img}. \item \texttt{bs=1M}: \texttt{bs} quiere decir ``block size'', y se refiere al tamaño de los bloques que se van escribiendo al archivo de escritura. En este caso, definimos el tamaño de bloque de 1MB. \item \texttt{count=30720}: el número de bloques que se han de copiar. En nuestro caso, como estamos transfiriendo en bloques de 1MB, y queremos crear un disco virtual de 30GB, el número de bloques sería de $30 \times 1024 = 30720$. \end{itemize} Este proceso puede tardar mucho tiempo, ya que literalmente está creando un archivo de tamaño de 30GB, y cambiando todos los bytes del disco en esa región a cero. Hay otras herramientas para hacer esto, sobre todo de QEMU que se usa para administrar máquinas virtuales, mas esta herramienta (\texttt{dd}) tiene seguridad de estar ya en cualquier máquina UNIX. Con la imagen virtual, podemos abrirlo como si fuera cualquier otro dispositivo de almacenamiento. Normalmente éstos están en el directorio \texttt{/dev/}, mas como este se ha creado, está donde lo creamos. Con el comando siguiente, podemos ver el contenido actual de la imagen (que está vacía): \begin{verbatim} $ fdisk -l virt-drive.img Disk virt-drive.img: 30 GiB, 32212254720 bytes, 62914560 sectors Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes \end{verbatim} Para poder manejar las particiones, usaremos la herramienta \texttt{fdisk}, que es la más simple, aunque existan otras. Esto es porque \texttt{fdisk} es más universal, y se encontrará en cualquier sistema basado en UNIX. Esto lo hacemos corriendo el comando \texttt{fdisk virt-drive.img}. Entrando el comando \texttt{p}, nos dice: \texttt{Disklabel type: dos}. Esto es decir que ya al empezar, \texttt{fdisk} quiere trabajar con el sistema de particiones de MBR. Esto se usa por defecto ya que es la más universal, aunque hoy en día sería más común utilizar GPT, que se puede crear con el comando \texttt{g}. Para crear las particiones, usaremos el comando \texttt{n} (de {\em new}). Esto nos preguntará por el tipo de partición que queremos crear (primaria o extendida, la segunda siendo la que contiene las particiones lógicas). Al elegir primaria, nos preguntará el número de la partición (sólo del 1 al 4, ya que MBR no puede soportar más). Luego nos preguntará por el primer sector (es normal simplemente elegir el sector por defecto). Cuando se pregunta por el último sector, aquí es donde podemos especificar el tamaño de la partición con el sintaxis \texttt{+G}, donde \texttt{} es el tamaño que queremos. En nuestro caso, diremos \texttt{+10GB}. Al terminar nos creará una partición nueva de tamaño de 10GB de tipo \texttt{Linux}. \begin{verbatim} Command (m for help): n Partition type p primary (0 primary, 0 extended, 4 free) e extended (container for logical partitions) Select (default p): Using default response p. Partition number (1-4, default 1): First sector (2048-62914559, default 2048): Last sector, +/-sectors or +/-size{K,M,G,T,P} (2048-62914559, default 62914559): +10G Created a new partition 1 of type 'Linux' and of size 10 GiB. \end{verbatim} Al crear las particiones primarias, se crean las particiones lógicas. Para hacer esto se ha de crear, en primer lugar, la partición extendida. Esta partición (como indica en las instrucciones de \texttt{fdisk}) servirá como contenedor para las particiones lógicas. Para esto, cuando nos pide el tipo de partición introducimos \texttt{e}. \begin{verbatim} Partition type p primary (2 primary, 0 extended, 2 free) e extended (container for logical partitions) Select (default p): e \end{verbatim} Al crear la partición extendida, que ocupa el resto del disco, al crear una nueva partición sólo nos permitirá crear particiones lógicas: \begin{verbatim} Command (m for help): n All space for primary partitions is in use. Adding logical partition 5 First sector (41947136-62914559, default 41947136): Last sector, +/-sectors or +/-size{K,M,G,T,P} (41947136-62914559, default 62914559): +2G Created a new partition 5 of type 'Linux' and of size 2 GiB. \end{verbatim} En \texttt{fdisk} no existe un comando para cambiar las etiquetas de las particiones. Pero como esto es una función puramente estética, y tampoco importante para la tarea a mano, lo saltamos. Al acabar con las particiones debemos escribir los cambios. Para esto simplemente corremos el comando \texttt{w}. \begin{verbatim} Command (m for help): w The partition table has been altered. Syncing disks. \end{verbatim} Para poder formatear las particiones, debemos de salir de \texttt{fdisk}, y usar las herramientas de \texttt{mkfs}. Pero como es una imagen, y no un dispositivo de verdad, para acceder las particiones es necesario usar los {\em dispositivos loop}, que nos permite asociar dispositivos con archivos normales del sistema. Esto lo hacemos mediante el comando siguiente: \begin{verbatim} $ sudo losetup --partscan --show --find virt-drive.img /dev/loop0 \end{verbatim} Ahora se tratará el dispositivo \texttt{/dev/loop0} como si fuera un dispositivo real. Luego entonces podemos acceder a las particiones como \texttt{/dev/loop0pX}. Luego para formatear como FAT32 la partición, corremos el comando \texttt{mkfs.vfat}. La opción \texttt{-F32} nos dice qué tipo de FAT es (en este caso, 32). Esto nos será útil luego cuando queremos formatear como FAT(16). \begin{verbatim} $ sudo mkfs.vfat -F32 /dev/loop0p5 mkfs.fat 4.1 (2017-01-24) \end{verbatim} Para poder borrar luego las particiones que queramos, tendríamos que entrar otra vez en \texttt{fdisk}, mas ahora podemos usar el dispositivo virtual \texttt{/dev/loop0}. Luego tan sólo hace falta usar el comando \texttt{d} ({\em delete}) para borrar la partición que queramos. \begin{verbatim} Command (m for help): d Partition number (1-3,5-7, default 7): 7 Partition 7 has been deleted \end{verbatim} Para crear las particiones lógicas, y formatearla como FAT32, simplemente seguimos lo que hemos visto anteriormente. Pero para formatear como FAT(16), simplemente es necesario cambiar \texttt{-F32} a \texttt{-F16}. \begin{verbatim} $ sudo mkfs.vfat -F16 /dev/loop0p8 mkfs.fat 4.1 (2017-01-24) \end{verbatim} No se pueden fusionar dos particiones con \texttt{fdisk}, ya que realmente lo que se hace es borrar las dos particiones y crear una nueva en su lugar. Así que esto lo he saltado. No se puede encontrar esta funcionalidad, ni siquiera dentro de las opciones avanzadas. Finalmente, para acabar, como ya hemos acabado modificando el archivo podemos desligar el archivo del dispositivo \texttt{/dev/loop0} con el comando \texttt{sudo losetup -d /dev/loop0}. Ya no se pueden acceder al archivo por medio de \texttt{/dev/loop0}. \end{document}