Como montar partições e drives NTFS no Linux

Qualquer distro Linux atual tem suporte completo a leitura e escrita em sistemas de arquivos Windows, o que inclui o NTFS.
Os exemplos que seguem, foram aplicados a uma máquina Ubuntu 14.04 LTS, mas valem para Debian, Fedora ou qualquer outra distro Linux popular e atualizada.

Se você não estiver conseguindo realizar alguma operação com o drive, provavelmente falta algum módulo no seu kernel ou você não configurou algo adequadamente —. Neste texto, vou tentar mostrar algumas dicas de como montar partições NTFS, com todas as funções possíveis habilitadas.
Como montar partição NTFS no Linux - capa do tutorial

Cuidados básicos ao montar drives ou partições NTFS ou FAT32

Uma vez montado o drive, o Linux irá mostrar arquivos e pastas (diretórios) que, no Windows, estariam escondidos — o que pode expor arquivos de sistema. Portanto, é importante ter cuidado para não apagar o que não deve.

O Windows 7 armazena o estado do sistema em um arquivo em disco, quando entra em hibernação.
Ao “acordar”, restaura seu estado a partir daquele arquivo.
Isto quer dizer que você pode perder alterações feitas, durante a hibernação, em um drive compartilhado em uma máquina Windows (versão 7 e superior). — Manual do Ubuntu.

Um típico HD Windows costuma ter uma partição chamada “SYSTEM“, com tamanho entre 100 e 200 megabytes. A menos que você saiba o que está fazendo, não há qualquer necessidade de montá-la no Linux. A mesma dica vale para partições de recuperação do sistema, que costumam ser chamadas de “RECOVERY“.

Sistemas de arquivos comuns no Windows

Basicamente, os sistemas de arquivos mais comuns em sistemas Windows são estes:

  • O Windows 7, Vista, XP 2000, antigos sistemas NT e o Windows Server 2003 e 2008, são formatados com NTFS. O FAT32 é raramente usado, como padrão, nestas versões.
  • As versões anteriores, raramente usam o NTFS — O padrão é o FAT32.
  • Drives e cartões flash (pendrives, cartões SD etc) são tipicamente formatados como FAT16. Em alguns casos, é usado o exFAT.

Você pode verificar quais sistemas de arquivos estão sendo usados nos drives e dispositivos conectados ao seu computador com o comando fdisk:


sudo fdisk -lu

A relação dos sistemas de arquivos conectados pode ser extensa. O exemplo abaixo, mostra informações de um pendrive, conectado em /dev/sdc1 (no meu sistema):

Disco /dev/sdc: 4009 MB, 4009754624 bytes
84 cabeças, 22 setores/trilhas, 4237 cilindros, total de 7831552 setores
Unidades = setores de 1 * 512 = 512 bytes
Tamanho do setor (lógico/físico): 512 bytes / 512 bytes
Tamanho da E/S (mínimo/ideal): 512 bytes / 512 bytes
Identificador do disco: 0x00054216

Dispositivo Boot      Início        Fim      Blocos   Id  Sistema
/dev/sdc1              62     7831551     3915745    7  HPFS/NTFS/exFAT

Use o comando grep para obter um resultado mais compacto:


sudo fdisk -l | grep -i ntfs

/dev/sdc1              62     7831551     3915745    7  HPFS/NTFS/exFAT

No decorrer deste artigo, vou usar este dispositivo como exemplo — não esqueça de adaptar os exemplos dados à situação do seu sistema.

Suporte a NTFS no Linux

O Linux usa o driver ntfs-3g para ler e alterar partições NTFS.
O driver vem pré-instalado em várias distribuições — no Ubuntu, ele é parte da distro desde a versão 11.10.
Se você estiver usando uma distro Linux atual, provavelmente não precisará fazer nada para trabalhar plenamente com dispositivos e partições NTFS.
Se você estiver tendo problemas para alterar dados em alguma partição NTFS, cheque se o pacote ntfs-3g se encontra instalado em seu sistema.

Configure o Linux para montar automaticamente os dispositivos e partições NTFS

Se você pretende manter o drive sempre conectado à sua máquina Linux e deseja que ele seja sempre montado na inicialização, configurar as opções de montagem no arquivo /etc/fstab é uma boa idéia.
Será necessário adicionar um linha para cada partição a ser montada, no arquivo fstab.
A documentação oficial do Ubuntu, enumera, pelo menos 3 razões para configurar o fstab, em vez de montar pelo seu gerenciador de arquivos (Nautilus, no Ubuntu):

  • Quando mais de uma conta de usuário estiver ativa durante uma sessão — com o uso do fstab, é possível montar uma vez só, para todo mundo poder usar.
  • Quando você tem softwares ou bibliotecas configurados para usar a partição ou o drive em questão, na inicialização, você vai querer que tudo esteja pronto para eles, sem a sua interferẽncia.
  • Conveniência de ter um procedimento a mais automatizado no seu sistema.

Como configurar o fstab

Uma das melhores formas de automatizar o processo de montagem de um drive ou partição no Linux é fazê-lo pelo seu nome de volume — isto é especialmente útil, quando se trata de um pendrive, que vai ser conectado/desconectado sempre.

Por ora, use o comando blkid, para saber mais sobre a localização das unidades que já se encontram conectadas ao seu sistema:


sudo blkid

No nosso exemplo, o dispositivo que interessa é o último da lista:

/dev/sda1: UUID="ce32e86c-e404-4f84-8125-74d0fc4897f7" TYPE="swap" 
/dev/sda2: UUID="a2ab821d-ae58-42fc-9384-f96dfcdc22cc" TYPE="ext4" 
/dev/sdb1: UUID="eb8e4cca-42c6-498d-b5ba-cd397096b3e9" TYPE="ext4" 
/dev/sdc1: LABEL="NTFS-FLASH" UUID="4D016F2B3DF4A3CE" TYPE="ntfs"

De acordo com a listagem, acima, a partição a ser configurada no fstab é a /dev/sdc1 que, neste caso, corresponde a um drive flash USB (pendrive) — note que o nome do volume (LABEL) é NTFS-FLASH e o seu UUID é 4D016F2B3DF4A3CE.
Comece por criar um ponto de montagem ou mountpoint para cada dispositivo, que você for configurar no fstab.
O ponto de montagem é um diretório, que pode ter qualquer nome. Eu gosto de usar um nome semelhante ao do volume a ser montado:


sudo mkdir /media/ntfsflash

A seguir, faça backup do fstab:


sudo cp /etc/fstab /etc/fstab.original

Agora, abra o fstab com o seu editor preferido (eu vou de nano):


sudo nano /etc/fstab

Agora adicione a seguinte linha ao arquivo do fstab, para montar o dispositivo pelo seu UUID:


UUID=4D016F2B3DF4A3CE  /media/ntfsflash  ntfs-3g  defaults,windows_names,locale=pt_BR.utf8  0 0

Não se esqueça de substituir o UUID e ponto de montagem /media/ntfsflash por valores adequados ao seu sistema.
Se o seu idioma não for português do Brasil, você vai precisar adequar esta variável também.
Use o comando locale para determinar qual o valor mais adequado para você:


locale | grep LANG

Quando terminar de editar o fstab, grave as alterações e feche o editor.
Caso não saiba, para gravar as alterações no nano, use a combinação de teclas Ctrl+o.
Para fechar e sair do editor, use Ctrl+x.

Exemplo de execução do comando blkid
Clique, para ver detalhes.

A nova configuração do fstab terá efeito na próxima inicialização do sistema.
Se tiver pressa para ver o resultado, use o comando mount:


sudo mount -a

O comando, acima, monta todos (all) os dispositivos disponíveis e citados no fstab.
Se quiser, use o mount, para verificar se o seu dispositivo foi montado:


mount

/dev/sdb1 on / type ext4 (rw,errors=remount-ro,discard)
proc on /proc type proc (rw,noexec,nosuid,nodev)
sysfs on /sys type sysfs (rw,noexec,nosuid,nodev)

...

/dev/sda2 on /home type ext4 (rw)
systemd on /sys/fs/cgroup/systemd type cgroup (rw,noexec,nosuid,nodev,none,name=systemd)
gvfsd-fuse on /run/user/1000/gvfs type fuse.gvfsd-fuse (rw,nosuid,nodev,user=justincase)
/dev/sdc1 on /media/ntfsflash type fuseblk (rw,nosuid,nodev,allow_other,blksize=4096)[/plain]

Como montar uma partição NTFS como apenas-leitura

Uma solução fácil para montar uma partição NTFS com restrição a escrita é usar o driver NTFS antigo.
Substitua a linha que você adicionou ao fstab por esta:

UUID=4D016F2B3DF4A3CE  /media/ntfsflash  ntfs  defaults,umask=222  0 0

Novamente, não se esqueça de adequar o exemplo ao seu caso.
O método preferível é usar o driver atual e especificar que a partição deve permanecer apenas para leitura.
Coloque a cláusula ‘ro’, logo após ‘defaults’:

UUID=4D016F2B3DF4A3CE  /media/ntfsflash  ntfs-3g  defaults,ro,windows_names,locale=pt_BR.utf8  0 0

Isto irá permitir que o acesso ocorra em condições maiores de segurança ao sistema externo.

Como montar um drive ou partição NTFS na linha de comando do Linux

Para montar um dispositivo NTFS, usando um comando no terminal, use o exemplo abaixo.
Não esqueca de substituir os valores do exemplo dado pelos que se adequam ao seu sistema:


sudo mount -t ntfs-3g /dev/sdc1 /media/ntfsflash/

Você pode montar o dispositivo, com detecção automática do sistema de arquivos:


sudo mount -t auto /dev/sdc1 /media/ntfsflash/

Referências

Como montar um drive pelo nome do volume (label)

A cada vez que você monta um dispositivo de armazenamento externo, é comum ele ser referenciado, no Linux, em locais diferentes.
Um pendrive, hoje, pode estar em /dev/sdc e amanhã em /dev/sdb.
flash memory icon
Mas, e se você tem um script ou aplicativo que precisa saber exatamente onde encontrar os seus dados, sempre?
Se o nome deste dispositivo de armazenamento se mantiver sempre único e sem mudanças, é possível se referir a ele, no Linux.
O comando mount permite montar qualquer dispositivo a partir do seu nome de volume (disk volume label).



Se você ainda não configurou o nome do volume do seu dispositivo, pode usar o comando e2label, para isto.
Veja um exemplo de como mostrar o nome do volume atual:

e2label /dev/sdd3
musicas

Para alterar o nome do volume do seu dispositivo de armazenamento externo, use este exemplo:

e2label /dev/sdd3 novo_nome

Como montar um drive pelo seu nome de volume

No exemplo que segue, vou montar um drive externo, cujo nome de volume é “Fotos”, na minha pasta de usuário, com o nome de “Camera”.

mount -L fotos /home/Imagens/Camera

Vamos ver um outro exemplo.
Se quiser montar um HD externo, com o nome de volume “Documentos” em “/media/usb”, faça o seguinte:

mkdir -p /media/usb
mount -L Documentos /media/usb

Configure o fstab

Opcionalmente, você pode pode posicionar a requisição para montar o seu dispositivo dentro do arquivo /etc/fstab.
Ao fazer isto, você irá garantir que ele seja montado automaticamente a cada vez que o sistema for iniciado.
Adicione a seguinte linha ao arquivo /etc/fstab (com os devidos ajustes, para que se adequem à sua realidade):

LABEL=Documentos     /media/usb    ext4   defaults 0 0

Espero que isto resolva.

Referências

Como desmontar um drive ocupado em 2 passos

Se você está tentando desconectar um dispositivo USB, um pendrive ou remover um DVD e ele demora muito (e, aparentemente, nada acontece) é por que algo errado pode estar acontecendo.
Há várias situações em que um dispositivo pode parar de responder às suas tentativas de remoção (desmontar, ejetar etc.) — a mais comum é que ele esteja sendo retido por algum programa (processo).
usb flash media pendriveSe um processo ainda estiver escrevendo/lendo dados, ele vai “tentar” impedir que você desconecte o dispositivo — seja um CD/DVD/Blu-Ray, um pendrive, um cartão de memória, um HD externo etc.
O ideal é esperar — se você estiver lidando com transferências volumosas entre dispositivos, boa parte destes dados pode estar armazenada no cache do sistema, aguardando disponibilidade para concluir a transação.
Ou seja, mesmo que você não perceba qualquer atividade de tráfego de dados no sistema, ela pode, sim, ainda estar ocorrendo — e desconectar um drive nestas condições é extremamente arriscado.
Neste post, vou mostrar como lidar, de forma segura, com esta situação.

Feche os programas relacionados ao dispositivo

Você está ouvindo música no pendrive ou no cartão de memória?
Está editando algum texto ou planilha armazenada no dispositivo?
Em casos assim, o dispositivo está em uso pelo programa em execução e impedir que ele seja retirado é uma medida de segurança do sistema — para evitar que você perca os seus dados e/ou danifique o sistema de arquivos do dispositivo.
Feche todos os programas abertos e aguarde uns instantes — e tente ejetar novamente.
Se isto ainda não resolveu, prossiga a leitura.

Como resolver o problema

A minha primeira opção é o comando sync. Sua função é escoar os dados retidos no buffer do sistema de arquivos, pro dispositivo de destino.
Na maioria das vezes, tudo se resolve com este comando.
Comece por abrir um terminal e execute o comando:

sudo sync

Aguarde alguns instantes.
Se isto não resolver, tente o que segue:
Localize o dispositivo, com o comando mount:

mount
/dev/sda2 on / type ext4 (rw,errors=remount-ro)
proc on /proc type proc (rw,noexec,nosuid,nodev)
sysfs on /sys type sysfs (rw,noexec,nosuid,nodev)
none on /sys/fs/pstore type pstore (rw)
/dev/sda1 on /home type ext4 (rw)
systemd on /sys/fs/cgroup/systemd type cgroup (rw, noexec, nosuid, nodev, none, name=systemd)
gvfsd-fuse on /run/user/1000/gvfs type fuse.gvfsd-fuse (rw, nosuid, nodev, user=justincase)
/dev/sdc1 on /mnt type ext4 (rw)

Vou usar como exemplo o dispositivo destacado acima /dev/sdc1, que está montado na diretório /mnt.
Para tentar desmontá-lo, use o seguinte comando:

sudo umount /dev/sdc1

comandos mount umount linux ubuntu
comando mount retornou erro
Se este método não funcionou, você vai precisar descobrir qual(is) processo(s) está(ão) retendo o dispositivo — e decidir o que fazer com ele(s).

Como determinar qual processo está ocupando o dispositivo

A idéia é justamente esta: identificar quem está ocupando o drive e “pedir para ele parar”.
Neste artigo, vou abordar 3 métodos para identificar e resolver o problema:

  • pseste comando exibe um relatório instantâneo sobre os processos em execução.
  • lsof — este comando é usado para listar os arquivos em aberto. Ele pode apontar se há algum programa mantendo um arquivo aberto em seu pendrive.
  • fuser — identifica processos que estejam usando arquivos ou sockets.

O comando PS

O ps, em conjunto com o comando grep, pode resolver esta situação em um piscar de olhos.
Adéque a linha de comando, abaixo, à sua realidade:

ps aux | grep -i "/mnt"

No exemplo acima, eu inquiri o sistema sobre os processos em execução com ps aux e filtrei o resultado, para ver apenas o que se referia à pasta em que o dispositivo /dev/sdc1 está montado: /mnt. Veja o resultado:

justinc+  8233  2.8  0.1  83016  3012 pts/30   Sl   20:06   0:04 mpg123 /mnt/Música/REO Speedwagon - discography/1971 R.E.O. Speedwagon/01 Gypsy Woman's Passion.mp3
justinc+  8264  0.0  0.0   4956   848 pts/30   S+   20:09   0:00 grep --color=auto -i /mnt

Quem está mantendo o meu dispositivo ocupado é o player mpg123 — e a identificação do processo 8233.
Para interromper este aplicativo, use o comando kill:

kill -9 8233

Use lsof para listar os arquivos abertos (opened files)

Vou usar um método semelhante ao que usei antes com o comando ps, combinando-o com um filtro grep:

lsof | grep -i "/mnt/"

Tenha um pouco de paciência — este comando pode demorar um pouco para apresentar os seus resultados.
Novamente, o player de músicas mpg123 aparece na lista, com o seu PID. Veja:

mpg123    13424       justincase    8r      REG       8,33    9695544  5505285 /mnt/Música/REO Speedwagon - discography/1971 R.E.O. Speedwagon/02 157 Riverside Avenue.mp3
threaded- 13424 13427 justincase    8r      REG       8,33    9695544  5505285 /mnt/Música/REO Speedwagon - discography/1971 R.E.O. Speedwagon/02 157 Riverside Avenue.mp3

Use o comando kill para terminar o processo (note que o PID – Process IDentification – mudou):

kill -9 13424

Use o fuser para encontrar o processo que está usando o seu dispositivo

O último método é o meu preferido.
O comando fuser pode ser usado para identificar processos que estejam mantendo arquivos abertos ou ocupando sockets. Veja como usar:

fuser -m /dev/sdc1

O resultado, no meu sistema foi o seguinte:

/dev/sdc1:            6740c 13702

O último número, é o do PID — que vamos informar ao comando kill:

kill -9 13702

como usar o comando fuser
Se necessário, preceda o comando kill com o sudo — para ter privilégios administrativos:

sudo kill -9 13702

Outras soluções com umount

Se o problema persistir, você pode tentar “remontar” um dispositivo em modo “somente leitura” (read-only) – o que causará menos danos ao seu sistema de arquivos, se for removido arbitrariamente (use o sudo, se necessário):

sudo umount -rv /dev/sdc1
[sudo] password for justincase: 
umount: /dev/sdc1 está ocupado - remontado somente para leitura

Se você obtiver sucesso nisto, já pode desconectar o drive ou a mídia.
As soluções que seguem são variantes do comando umount e você combinar os parâmetros e as opções para obter o melhor resultado.
Elas não funcionam não funcionam em kernels anteriores ao 2.4:
Para forçar a remoção:

sudo umount -vf /dev/sdc1

Remover imediatamente o sistema de arquivos do dispositivo junto a todas as referências, tão logo ele se desocupe:

sudo umount -l /dev/sdc1

Combinando as duas:

sudo umount -lf /dev/sdc1

Espero que uma destas soluções funcione para você. 😉