Acesso ao cluster
*****************

Esta página destina a mostrar meios de interagir com o cluster do C3SL. Acessar remotamente o cluster e copiar arquivos do computador pessoal para o cluster e depois copiar arquivos do cluster para computador pessoal.

.. contents:: Formas de acesso
   :depth: 4

Acesso via ssh
==============
| A forma de acessar o cluster é por meio do protocolo de acesso ssh (secure shell).
| O nome do cluster para acesso é: c3hpc.c3sl.ufpr.br

Acesso ssh Linux
----------------
A principal forma de utilizar o *ssh* no Linux é por meio do terminal.

*ssh* terminal Linux
^^^^^^^^^^^^^^^^^^^^
| Abra o terminal e digite o comando: ``ssh <login>@c3hpc.c3sl.ufpr.br``. 
| Onde:

- <login> é o seu usuário do cluster

Exemplo de acesso por terminal Linux
""""""""""""""""""""""""""""""""""""

.. code-block:: console

  odair:~/ $ ssh odair@c3hpc.c3sl.ufpr.br                                        
  Linux c3hpc 5.10.0-16-amd64 #1 SMP Debian 5.10.127-1 (2022-06-30) x86_64
  ================================================================================

  Suporte: c3hpc@c3sl.ufpr.br

  ===============================================================================
  Last login: Wed Aug 31 19:28:56 2022 from 2801:82:80ff:8001:216:ccff:feaa:77
  ➜  ~

Acesso ssh windows
------------------
TODO

Termius
^^^^^^^
TODO


Copiar de arquivos para o cluster
=================================
Para copiar arquivos para o cluster é possível utilizar os comandos: *scp* ou *rsync*

Comando *scp*
-------------
| O comando scp (secure copy) funciona da mesma maneira que o comando *cp* só que precisa passar o servidor para onde está copiando.

| Para copiar um arquivo local para o cluster utilize o comando:
| ``scp <arquivo> <login>@c3hpc.c3sl.ufpr.br:~/<destino>``
| Onde:

	* <arquivo> é o nome ou caminho para o arquivo que deseja copiar.
	* <login> É o seu usuário no cluster.
	* <destino> É o nome ou caminho de destino do arquivo no cluster.

| Para copiar diretórios é necessário passar a opção *-r*
| ``scp -r <diretório> <login>@c3hpc.c3sl.ufpr.br:~/<destino>``

Exemplo de cópia com *scp*
^^^^^^^^^^^^^^^^^^^^^^^^^^
O exemplo a seguir mostra como copiar um arquivo ou diretório com scp para sua conta no cluster:

.. code-block:: console

  [odair@zaros ~]$ scp -r experimentos/ odair@c3hpc.c3sl.ufpr.br:~/
  exp2                         100%    0     0.0KB/s   00:00
  exp1                         100%    0     0.0KB/s   00:00
  script.sh                    100%    0     0.0KB/s   00:00
  [odair@zaros ~]$

Para copiar do cluster para sua máquina local é só inverter a ordem dos parâmetros:

.. code-block:: console

  [odair@zaros ~]$ scp -r  odair@c3hpc.c3sl.ufpr.br:~/experimentos resultados
  [odair@zaros ~]$ ls resultados/
  exp1  exp2  script.sh
  [odair@zaros ~]$

Comando *rsync*
---------------
| O comando rsync é mais robusto que o scp, e segue a mesma lógica de uso.
| Para copiar um arquivo local para o cluster use:
| ``rsync -avhHP <arquivo> <login>@c3hpc.c3sl.ufpr.br:~/<destino>``
| Para copiar um arquivo remoto do cluster para a sua máquina utilize:
| ``rsync -avhHP <login>@c3hpc.c3sl.ufpr.br:/<arquivo> <destino>``

Onde:

- ``<arquivo>`` É o nome ou caminho para o arquivo que deseja copiar.
- ``<login>`` É o seu usuário no cluster.
- ``<destino>`` É o nome ou caminho de destino do arquivo no cluster.

Os parâmetros utilizados no comando do ``rsync`` significam:

- ``-a`` Copiar tanto arquivo quanto diretório.
- ``-v`` Mostrar uma saída mais detalhada.
- ``-h`` Mostrar valores em unidades humanas, como MB, GB
- ``-H`` Copiar e manter hard-links.
- ``-P`` Mostrar o progresso durante a cópia

Exemplo de cópia com comando *rsync*
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

Copiando diretório local para o cluster:

.. code-block:: console

  [odair@zaros ~]$ rsync -avhHP experimentos_v2/ odair@c3hpc.c3sl.ufpr.br:~/experimentos_v2/
  sending incremental file list
  created directory /home/odair/experimentos_v2
  ./
  exp1
                0 100%    0,00kB/s    0:00:00 (xfr#1, to-chk=2/4)
  exp2
                0 100%    0,00kB/s    0:00:00 (xfr#2, to-chk=1/4)
  script.sh
                0 100%    0,00kB/s    0:00:00 (xfr#3, to-chk=0/4)
  
  sent 233 bytes  received 130 bytes  242,00 bytes/sec
  total size is 0  speedup is 0,00
  [odair@zaros ~]$


Copiando diretório remoto do cluster para máquina local

.. code-block:: console

	[odair@zaros ~]$ rsync -avhHP odair@c3hpc.c3sl.ufpr.br:~/experimentos_v2/ resultados_2
	receiving incremental file list
	created directory resultados_2
	./
	exp1
			  0 100%    0,00kB/s    0:00:00 (xfr#1, to-chk=2/4)
	exp2
			  0 100%    0,00kB/s    0:00:00 (xfr#2, to-chk=1/4)
	script.sh
			  0 100%    0,00kB/s    0:00:00 (xfr#3, to-chk=0/4)

	sent 88 bytes  received 235 bytes  129,20 bytes/sec
	total size is 0  speedup is 0,00
	[odair@zaros ~]$ ls resultados_2/
	exp1  exp2  script.sh
	[odair@zaros ~]$

.. tip::

	| Recomendo criar um alias no .bashrc ou .zshrc para comandos de cópias, uma sugestão de alias é:
	| ``alias copy="rsync -ahH --info=progress2 --mkpath"``

	| O parametro ``--mkpath`` cria subdiretórios no destino, caso ele não exista, consulte ``man rsync`` para mais informações
	| Com esse alias basta fazer:

    | ``copy <arquivo> <login>@c3hpc.c3sl.ufpr.br:<destino>``
    | ``copy <login>@c3hpc.c3sl.ufpr.br:<arquivo> <destino>``