\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{+<tam>G}, donde \texttt{<tam>} 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}
