1

디스크를 넣은 후 Google Cloud Platform (GCP)에서 을 완료했습니다. 설치가 완료되었습니다. 인스턴스에 ssh 할 수 없습니다.gcp : 디스크가 완료된 후 * 장착 중입니다. 내 인스턴스에 ssh 할 수 없습니다.

세부 사항 : 윈도우에

통해 구글 클라우드 SDK 쉘을 cmd 창 나는 C:\>에서 다음을 실행 7 PC :

같이 보이는, create_instance_working.py를 실행
python "C:\Users\user's name\path\to\py\create_instance_working.py" --name inst-test2 --zone us-central1-a direct-to 
pic-1234 cc-test1 

:

import argparse 
import os 
import time 

import googleapiclient.discovery 
from six.moves import input 


# [START list_instances] 
def list_instances(compute, project, zone): 
    result = compute.instances().list(project=project, zone=zone).execute() 
    return result['items'] 
# [END list_instances] 


# [START create_instance] 
def create_instance(compute, project, zone, name, bucket): 

    image_response = compute.images().getFromFamily(
     project='direct-topic-1234', family='theFam').execute() 
    source_disk_image = image_response['selfLink'] 

    machine_type = "projects/direct-topic-1234/zones/us-central1-a/machineTypes/n1-standard-4" 
    startup_script = open(
     os.path.join(
      os.path.dirname(__file__), 'startup-script_working.sh'), 'r').read() 


    print(machine_type) 

    config = { 
     'name': name, 
     'machineType': machine_type, 


     'disks': [ 
      { 
       'boot': True, 
       'autoDelete': True, 
       'initializeParams': { 
        'sourceImage': source_disk_image, 
        'diskSizeGb': '15', 
       } 
      }, { 

       "deviceName": "disk-2", 
       "index": 1, 
       "interface": "SCSI", 
       "kind": "compute#attachedDisk", 
       "mode": "READ_WRITE", 
       "source": "projects/direct-topic-1234/zones/us-central1-a/disks/disk-2", 
       "type": "PERSISTENT" 
      } 
     ], 

     'networkInterfaces': [{ 
      'network': 'global/networks/default', 
      'accessConfigs': [ 
       {'type': 'ONE_TO_ONE_NAT', 'name': 'External NAT'} 
      ] 
     }], 


     "serviceAccounts": [ 
      { 
       "email": "[email protected]", 
       "scopes": [ 
       "https://www.googleapis.com/auth/devstorage.read_only", 
       "https://www.googleapis.com/auth/logging.write", 
       "https://www.googleapis.com/auth/monitoring.write", 
       "https://www.googleapis.com/auth/servicecontrol", 
       "https://www.googleapis.com/auth/service.management.readonly", 
       "https://www.googleapis.com/auth/trace.append" 
       ] 
      } 
      ], 



     'metadata': { 
      'items': [{ 
       'key': 'startup-script', 
       'value': startup_script 
      }, { 
       'key': 'bucket', 
       'value': bucket 
      }] 
     } 
    } 

    return compute.instances().insert(
     project=project, 
     zone=zone, 
     body=config).execute() 
# [END create_instance] 


# [START delete_instance] 
def delete_instance(compute, project, zone, name): 
    return compute.instances().delete(
     project=project, 
     zone=zone, 
     instance=name).execute() 
# [END delete_instance] 


# [START wait_for_operation] 
def wait_for_operation(compute, project, zone, operation): 
    print('Waiting for operation to finish...') 
    while True: 
     result = compute.zoneOperations().get(
      project=project, 
      zone=zone, 
      operation=operation).execute() 

     if result['status'] == 'DONE': 
      print("done.") 
      if 'error' in result: 
       raise Exception(result['error']) 
      return result 

     time.sleep(1) 
# [END wait_for_operation] 


# [START run] 
def main(project, bucket, zone, instance_name, wait=True): 
    compute = googleapiclient.discovery.build('compute', 'v1') 

    print('Creating instance.') 

    operation = create_instance(compute, project, zone, instance_name, bucket) 
    wait_for_operation(compute, project, zone, operation['name']) 

    instances = list_instances(compute, project, zone) 

    print('Instances in project %s and zone %s:' % (project, zone)) 
    for instance in instances: 
     print(' - ' + instance['name']) 

    print(""" 
Instance created. 
It will take a minute or two for the instance to complete work. 
Check this URL: http://storage.googleapis.com/{}/output.png 
Once the image is uploaded press enter to delete the instance. 
""".format(bucket)) 

#  if wait: 
#   input() 
# 
#  print('Deleting instance.') 
# 
#  operation = delete_instance(compute, project, zone, instance_name) 
#  wait_for_operation(compute, project, zone, operation['name']) 

    print('all done with instance.') 

if __name__ == '__main__': 

    print('in here 3') 
    main('direct-topic-1234', 'cc-test1', 'us-central1-a', 'inst-test1') 
    print('in here 4') 
# [END run] 

다음과 같은 시작 스크립트 (startup-script_working.sh)를 호출합니다.

sudo mkfs.ext4 -m 0 -F -E lazy_itable_init=0,lazy_journal_init=0,discard /dev/sdb 
sudo mount -o discard,defaults /dev/sdb /var 
sudo chmod a+w /var 
sudo cp /etc/fstab /etc/fstab.backup 
echo UUID=`sudo blkid -s UUID -o value /dev/sdb` /var ext4 discard,defaults,nofail 0 2 | sudo tee -a /etc/fstab 

는 둘 다에서 적응했다 : GCP 콘솔에서

https://github.com/GoogleCloudPlatform/python-docs-samples/blob/master/compute/api/create_instance.py

, 내가 인스턴스 녹색 빛을 볼 때 나는 즉시 인스턴스 ssh 버튼을 클릭하고 성공적으로 인스턴스에 연결합니다. 그러나 인스턴스에 대한 새 ssh 연결을 계속 여는 경우 /var에 마운트가 완료 될 때까지 모두 작동합니다. 마운트가 완료되면 ssh 연결 (정상적으로 첫 번째 연결)에서 찾으면 나타납니다 : df -h. /dev/sdb 197G 60M 197G 1% /var을 볼 수 있습니다. 시도가 실패하기 전에 마운트가 나타나지 않습니다. 그러나 그것이 나타난 후에는 아무것도 그것에 대해 ssh하지 않을 것입니다. 콘솔에서 >_ 버튼 (쉘)을 시도한 gcloud compute ssh [instance name]. 시도한 퍼티 [user name]@[external IP].

나는 그때까지 마운트가 완료 될 때까지 ssh를 기다리는 5 분 동안 시도했으나 작동하지 않습니다.

중요 : 내가 무기한 연결할 수있는 시작 스크립트의 모든 라인을 주석되었을 경우, SSH 문제. 나는 새로운 디스크를 만들고 대신 첨부하려고했습니다.

그래서 ssh 문제의 원인이되는 디스크 마운트에 관한 것 같습니다.

초기 ssh 연결은 새 것을 만들 수는 없지만 계속 정상적으로 작동합니다.

ssh 연결 내가 ssh를 창에이 얻을 실패

".. 연결 SSH 서버와 통신하는 동안 오류가 발생했습니다 서버와 네트워크 구성을 확인

실패" 가

어떤 아이디어가 원인일까요?

인스턴스 (12)

내 설치 지침은 여기에서 온 리눅스 배포판의 SUSE입니다 :

https://cloud.google.com/compute/docs/disks/add-persistent-disk

단지 (제공하시기 바랍니다) 도움이 될 상황을 피할 수있는 좋은 방법이 있다면,하지만 나는 내가 뭘 잘못하고 있는지 알고 싶다.

저는 GCP, 클라우드는 일반적으로 python, ssh 및 Linux에 익숙하지 않습니다. (이 질문에 모든게 새로운 것입니다!)

내가 시작 스크립트 줄을 주석으로 처리한다면 설명 된대로 모든 것을 실행하십시오. 수동으로 시작 스크립트 명령을 실행하십시오. 오류가 발생하지 않습니다. 나중에 다른 ssh 연결을 만들지 테스트하십시오. 우리는 그렇게하고보고한다.

답변

1

ssh과 관련된 데이터가 포함되어있는 /var에 장착하면 /var에 도달하는 시스템이 공 디스크로 표시됩니다. 데이터는 다른 곳에 보존해야하며 (0x), var에 마운트 한 다음 데이터를 다시 이동하십시오.

이전의 대답이 잘못되었습니다.