sexta-feira, 30 de janeiro de 2015

Sistema de arquivo de partições HD no Linux


Introdução

Todos os arquivos no linux estão dispostos hierarquicamente em forma de árvore, sendo a raiz o diretório “/” e todas as partições e dispositivos montados em nosso computador também fazem parte dessa árvore. Sabemos que cada partição tem um tipo e também um possível sistema de arquivos, que pode ser um dos mais diversos, como EXT3, EXT4, FAT32, etc. Esses dias precisei descobrir o sistema de arquivos de uma partição, e por algum motivo não lembrava um modo de fazer isso. Depois de alguns minutos, lembrei do comando mount e resolvi o problema. Porém, mesmo assim fiz uma pesquisa para descobrir outros modos.
Nesse post iremos aprender quatro maneiras de se obter o tipo de e o sistema de arquivos de uma partição.

Solução 1

O comando mount nos mostra o sistema de arquivos em cada partição, além de outras informações:
 
# mount
...
...
/dev/sdb1 on /media/XISTO type vfat (rw,nosuid,nodev,relatime,uid=1000,gid=1000,fmask=0022,dmask=0077,codepage=cp437,iocharset=ascii,shortname=mixed,showexec,utf8,errors=remount-ro,uhelper=udisks)
/dev/sda6 on /home/daemonio/usb type ext4 (rw,relatime,seclabel,data=ordered)

Solução 2

Em [1], vemos que o comando df com a opção -T também pode ser utilizado:
 
$ df -T
Filesystem     Type     1K-blocks     Used Available Use% Mounted on
...
...
/dev/sdb1      vfat        994832   694500    300332  70% /media/pendrive
/dev/sda6      ext4      38448276  2002272  34492904   6% /home/daemonio/usb
A coluna Type foi acrescentada pela opção -T.

Solução 3

Ainda em [1], temos também o comando file para solucionar essa tarefa:
 
[root@daemonio tmp]# file -s /dev/sda3
/dev/sda3: Linux rev 1.0 ext4 filesystem data, ...

Solução 4

Para desenferrujar nosso lado hacking, vamos encontrar o tipo de uma partição primária usando o padrão DOS de partição. O primeiro setor do disco contém a MBR, que nada mais é que um conjunto de informações que inclui a tabela de partições e o código inicial do gerenciador de boot do sistema operacional. Nos últimos 64 bytes da MBR, temos a tabela de partições:
 
# dd if=/dev/sda count=1 | xxd
 
0000000: eb63 908e d88e d0bc 007c 89e6 0657 8ec0  .c.......|...W..
0000010: fbfc bf00 06b9 0001 f3a5 ea1f 0600 0052  ...............R
0000020: 52b4 41bb aa55 31c9 30f6 f9cd 1372 1381  R.A..U1.0....r..
0000030: fb55 aa75 0dd1 e973 0966 c706 8d06 b442  .U.u...s.f.....B
...
...
00001b0: 0000 0000 0000 0000 7480 07c8 0000 0020  ........t...... 
00001c0: 2100 06fe ffff 0008 0000 0040 9002 00fe  !..........@....
00001d0: ffff 83fe ffff 0048 9002 0000 6a18 80fe  .......H....j...
00001e0: ffff 83fe ffff 0048 fa1a 0080 a903 00fe  .......H........
00001f0: ffff 05fe ffff 00c8 a31e b022 9f06 55aa  ..........."..U.
 
As últimas linhas da saída representam a tabela de partições. Como nesse modelo só podemos ter 4 partições primárias, o início de cada uma delas foi marcado por um negrito. Esse número em negrito é a flag indicando se a partição é de boot (valor 0x80) ou não (valor 0x00).
Por [2] e [3], vemos que o tipo da partição se encontra no quinto byte (em itálico) desde o início do negrito. Usando esse byte como índice na tabela de tipos [2], encontramos o tipo de cada partição no nosso disco:
 
+---------+--------------------+
| Número  |  Tipo da Partição  |
+---------+--------------------+
|  0x05   |      Estendida     |
+---------+--------------------+
|  0x06   |        FAT16       |
+---------+--------------------+
|  0x82   |     Linux Swap     |
+---------+--------------------+
|  0x83   |        Linux       |
+---------+--------------------+

No meu caso, eu tenho duas partições primárias no formato Linux, uma FAT16 e outra estendida. Aqui, não irei mostrar como obter o tipo das partições lógicas, ou seja, aquelas contidas na partição estendida. Para mais detalhes veja [2] e [3].
Bem, essa solução foi para mostrar que conhecendo detalhes internos das coisas, podemos obter informações muito interessantes. Esses pequenos hackings são muito úteis na área de forense digital, como podemos ver em [2].

 

Conclusão


Existem vários programas e métodos para se descobrir o tipo de uma partição e o sistema de arquivos dela. Hoje vimos como utilizar os comandos mount, df e file para resolver esse problema. Aprendemos também a ler diretamente a MBR para se obter o tipo de uma partição.

Referências


Retirado do Blog do Autor: -


[1] Linux how to determine the file system type by NIXCRAFT (Acessado em: Novembro/2012)
http://www.cyberciti.biz/faq/linux-how-to-determine-find-out-file-system-type/
[2] Partição by wikipedia (Acessado em: Novembro/2012)
http://pt.wikipedia.org/wiki/Parti%C3%A7%C3%A3o
[3] PC-Based Partitions by Priscilla Oppenheimer (Acessado em: Novembro/2012)
http://www.priscilla.com/Courses/ComputerForensics/pdfslides/01-PC_Partitions.pdf