AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / computer / Perguntas / 1498113
Accepted
miguelmorin
miguelmorin
Asked: 2019-11-02 06:33:48 +0800 CST2019-11-02 06:33:48 +0800 CST 2019-11-02 06:33:48 +0800 CST

Rsync não está excluindo arquivos e reclama de "Sem espaço no dispositivo (28)"

  • 772

Estou usando rsync(2.6.9, protocolo versão 29) no macOS 10.14.6 (Mojave) para fazer backup de um disco com vídeos. A fonte tem capacidade de 999 GB com 75 GB livres e o backup tem capacidade de 1 TB. O comando é:

$ rsync -avxW --progress /Volumes/Video/ /Volumes/Video\ backup/
building file list ... 
40989 files to consider
.DS_Store
       26628 100%    0.00kB/s    0:00:00 (xfer#1, to-check=40987/40989)
.DocumentRevisions-V100/
.Spotlight-V100/
rsync: failed to set times on "/Volumes/Video backup/.Spotlight-V100": Operation not permitted (1)
.fseventsd/
iMovie Library.imovielibrary/movie/Original Media/
iMovie Library.imovielibrary/movie/Original Media/DSC_0004.mov
rsync: writefd_unbuffered failed to write 32768 bytes [sender]: Broken pipe (32)
rsync: write failed on "/Volumes/Video backup/iMovie Library.imovielibrary/movie/Original Media/DSC_0004.mov": No space left on device (28)
rsync error: error in file IO (code 11) at /BuildRoot/Library/Caches/com.apple.xbs/Sources/rsync/rsync-52.200.1/rsync/receiver.c(268) [receiver=2.6.9]
rsync: connection unexpectedly closed (76 bytes received so far) [sender]
rsync error: error in rsync protocol data stream (code 12) at /BuildRoot/Library/Caches/com.apple.xbs/Sources/rsync/rsync-52.200.1/rsync/io.c(453) [sender=2.6.9]

O disco de backup está cheio porque rsyncnão excluiu vários arquivos que agora estão faltando no original. Verifiquei se a opção --delete-beforeé o padrão e também tentei --deleteremover arquivos estranhos, mas obtive o mesmo erro com o mesmo arquivo.

Como posso fazer um clone perfeito de um disco com rsync?

video mac
  • 1 1 respostas
  • 489 Views

1 respostas

  • Voted
  1. Best Answer
    miguelmorin
    2019-11-18T14:01:22+08:002019-11-18T14:01:22+08:00

    Por falta de uma solução legal, codifiquei um hack em Python para percorrer o destino e excluir os arquivos e diretórios que não existem na fonte.

    Certifique-se de não trocar acidentalmente a origem e o destino, ou você perderá os arquivos originais. A ordem é a mesma rsync: primeiro fonte e depois destino.

    Por padrão, o código solicita confirmação antes de excluir os cinco primeiros caminhos, para que você possa verificar se não está excluindo a origem. Ele exclui arquivos no destino que são links simbólicos na origem.

    Usar com:

    python3 rsync_pre_process.py /Volumes/source /Volumes/target
    

    Você pode executar rsynccom, por exemplo, conforme abaixo (e -apreserva os links simbólicos):

    rsync -avxW --delete --delete-before --progress /Volumes/source /Volumes/target
    

    Aqui está o código para rsync_pre_process.py:

    #!/usr/bin/env python3
    # 
    # Usage: python3 rsync_pre_process.py /Volumes/source /Volumes/target [5]
    #
    # You can then run: rsync -avxW --delete --delete-before --progress /Volumes/source /Volumes/target
    # 
    # This code deletes files present in the target that are missing from the
    # source. It circumvents one case of rsync's error "No space left on device
    # (28)" even though you may run rsync with `-delete` and `--delete-before`.
    #
    # It prompts for confirmation to delete a certain number of files or
    # directories, 5 by default, before deleting files without confirmation.
    #
    # It removes files in the target that are symlinks in the source.
    #
    # author: Miguel Morin
    # copyright: public domain
    # year: 2019
    
    import os
    import pathlib
    import shutil
    import sys
    
    MAX_VERIFICATIONS = 5
    
    def remove(path, verify):
        """Removes a file or directory, asking for confirmation first if requested."""
        if verify:
            print(path)
            print("Remove this file? Press RET to proceed, C-c to abort.")
            sys.stdin.read(1)
        p = pathlib.Path(path)
        if os.path.islink(path) or not p.is_dir():
            os.remove(path)
        else:
            try:
                # shutil.rmtree instead of os.remove() because the former works in
                # iMovie folders where the latter throws an error, `PermissionError:
                # [Errno 1] Operation not permitted:`
                shutil.rmtree(path)
            except PermissionError as e:
                print("Unable to remove '%s' due to permission error" % path)
    
    def cleanup(source, target, max_verifications):
        """Deletes all files from the target that are missing from the source, prompting 
        confirmations up to `max_verifications`.
        """
        num_verifications = 0
        for root, dirs, files in os.walk(target, topdown = False):
            for name in files + dirs:
                verify = num_verifications < max_verifications
                target_filepath = os.path.join(root, name)
                source_filepath = target_filepath.replace(target, source)
                if not os.path.exists(source_filepath) or os.path.islink(source_filepath):
                    remove(target_filepath, verify)
                    num_verifications += 1
    
    def main():
        source = sys.argv[1]
        target = sys.argv[2]
    
        if not (source and target):
            raise ValueError("You must supply source and target arguments. Your arguments: " + str(argv[1:]))
    
        if 4 == len(sys.argv):
            max_verifications = int(sys.argv[3])
        else:
            max_verifications = MAX_VERIFICATIONS
    
        cleanup(source = source, target = target, max_verifications = max_verifications)
    
    if "__main__" == __name__:
        main()
    
    • 0

relate perguntas

  • linha de comando para colocar valores separados por vírgula em linhas separadas

  • como instalar um novo layout de teclado no mac quando não tenho acesso root?

  • OBS Studio—'Falha ao abrir o codec NVENC: função não implementada'

  • Como salvar o fluxo de vídeo TS com ffmpeg 2.0.2?

  • Os vídeos compactados podem ser decodificados de volta ao formato original não compactado?

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    O visualizador de fotos do Windows não pode ser executado porque não há memória suficiente?

    • 5 respostas
  • Marko Smith

    Como faço para ativar o WindowsXP agora que o suporte acabou?

    • 6 respostas
  • Marko Smith

    Área de trabalho remota congelando intermitentemente

    • 7 respostas
  • Marko Smith

    Serviço do Windows 10 chamado AarSvc_70f961. O que é e como posso desativá-lo?

    • 2 respostas
  • Marko Smith

    O que significa ter uma máscara de sub-rede /32?

    • 6 respostas
  • Marko Smith

    Ponteiro do mouse movendo-se nas teclas de seta pressionadas no Windows?

    • 1 respostas
  • Marko Smith

    O VirtualBox falha ao iniciar com VERR_NEM_VM_CREATE_FAILED

    • 8 respostas
  • Marko Smith

    Os aplicativos não aparecem nas configurações de privacidade da câmera e do microfone no MacBook

    • 5 respostas
  • Marko Smith

    ssl.SSLCertVerificationError: falha na verificação do certificado [SSL: CERTIFICATE_VERIFY_FAILED]: não foi possível obter o certificado do emissor local (_ssl.c:1056)

    • 4 respostas
  • Marko Smith

    Como posso saber em qual unidade o Windows está instalado?

    • 6 respostas
  • Martin Hope
    Albin Como faço para ativar o WindowsXP agora que o suporte acabou? 2019-11-18 03:50:17 +0800 CST
  • Martin Hope
    fixer1234 O "HTTPS Everywhere" ainda é relevante? 2019-10-27 18:06:25 +0800 CST
  • Martin Hope
    Kagaratsch O Windows 10 exclui muitos arquivos minúsculos muito lentamente. Algo pode ser feito para agilizar? 2019-09-23 06:05:43 +0800 CST
  • Martin Hope
    andre_ss6 Área de trabalho remota congelando intermitentemente 2019-09-11 12:56:40 +0800 CST
  • Martin Hope
    Riley Carney Por que colocar um ponto após o URL remove as informações de login? 2019-08-06 10:59:24 +0800 CST
  • Martin Hope
    zdimension Ponteiro do mouse movendo-se nas teclas de seta pressionadas no Windows? 2019-08-04 06:39:57 +0800 CST
  • Martin Hope
    Inter Sys Como Ctrl+C e Ctrl+V funcionam? 2019-05-15 02:51:21 +0800 CST
  • Martin Hope
    jonsca Todos os meus complementos do Firefox foram desativados repentinamente, como posso reativá-los? 2019-05-04 17:58:52 +0800 CST
  • Martin Hope
    MCK É possível criar um código QR usando texto? 2019-04-02 06:32:14 +0800 CST
  • Martin Hope
    SoniEx2 Altere o nome da ramificação padrão do git init 2019-04-01 06:16:56 +0800 CST

Hot tag

windows-10 linux windows microsoft-excel networking ubuntu worksheet-function bash command-line hard-drive

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve